首页 > 代码库 > 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中设计模式----------工厂模式.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。