首页 > 代码库 > 23中设计模式----------工厂模式.

23中设计模式----------工厂模式.

女娲造人故事开头(借由设计模式之禅):

  第一次烤泥人,感觉应该熟了,往大地一放,哇,没烤熟!于是白人诞生了!(这也是缺乏经验的最好证明)

  第二次烤泥人,上一次没烤熟,这一次多烤一会,放到世间一看,嘿,烤过头了,于是黑人诞生了!

  第三次烤泥人,一边烤一边察看,直到表皮嫩黄,嘿,真正好,于是黄色人种出现了!


 

言归正传,所谓的工厂模式,要从工厂说起,工厂就是制造生产东西的,所以,也很容易知道工厂模式就是,利用工厂生产对象。所以,工厂模式,要有工厂和需要生产的产品。

工厂模式的好处就在于,不需要知道对象是怎么产生的,只需要通过工厂我们可以根据不同的要求得到对应的对象。这样,既体现了封装,也表现了堕胎性。

由于需要生产具体的东西并不是很确定,所以产品一般都会是抽象类。

抽象产品代码:

//总球类public abstract class Ball {    public void fun1(){            }    public abstract void fun2();}

然后,只需让具体的产品集成该抽象类(所以一个工厂基本是生产一类产品)。

//足球public class Football extends Ball {        public void fun2() {            }}//篮球public class Basketball extends Ball {    public void fun2() {    }}

抽象工厂类定义产品生产方法:

1 //抽象工厂2 public abstract class Factory {3     4     public abstract <T extends Ball> T createBall(Class<T> c);5     6 }

是生产哪种具体球,具体的工厂类实现来确定。

 1 public class BallFactory extends Factory { 2     @Override 3     public <T extends Ball> T createBall(Class<T> c) { 4         Ball ball = null; 5         try { 6             ball = (Ball) Class.forName(c.getName()).newInstance(); 7         }  catch (Exception e) { 8             e.printStackTrace(); 9         }10         11         return (T) ball;12     }13 }

具体生产出的球类:

1 public class Client {2     public static void main(String[] args) {3         Factory factory = new BallFactory();4                 //通过工厂生产出的足球类!5         Ball footBall = factory.createBall(Football.class);6     }7 }    

这种简单的工厂模式,就设计好了。!


 

单例工厂模式:

 1 //单例类 2 public class Singleton { 3     private Singleton(){ 4          5     } 6 } 7  8 //单例工厂 9 public class SingletonFactory {10     private static Singleton single;11     //生成实力12     static{13         try {14             Class<?> clazz = Class.forName(Singleton.class.getName());15             Constructor<?> constructor = clazz.getDeclaredConstructor();16             constructor.setAccessible(true);17             single = (Singleton) constructor.newInstance();18         } catch (Exception e) {19             e.printStackTrace();20         }21     }22     //获取示例的方法23     public static Singleton getInstance(){24         return single;25     }26 }

在项目中,其实我们就有用到很多工厂模式,比如spring中的BeanFactory,我们通过spring容器帮我们创建我们所需要的实例对象,并不需要知道创建过程,并且维护该对象的生命周期也是通过spring,这样,封装性更好,同时扩展性也大大增强,更加安全!

 

23中设计模式----------工厂模式.