打字猴:1.70045771e+09
1700457710
1700457711 }
1700457712
1700457713 运行结果还是相同。我们回顾一下,每一个产品类都对应了一个创建类,好处就是创建类的职责清晰,而且结构简单,但是给可扩展性和可维护性带来了一定的影响。为什么这么说呢?如果要扩展一个产品类,就需要建立一个相应的工厂类,这样就增加了扩展的难度。因为工厂类和产品类的数量相同,维护时需要考虑两个对象之间的关系。
1700457714
1700457715 当然,在复杂的应用中一般采用多工厂的方法,然后再增加一个协调类,避免调用者与各个子工厂交流,协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。
1700457716
1700457717 3.替代单例模式
1700457718
1700457719 第7章讲述了单例模式以及扩展出的多例模式,并且指出了单例和多例的一些缺点,我们是不是可以采用工厂方法模式实现单例模式的功能呢?单例模式的核心要求就是在内存中只有一个对象,通过工厂方法模式也可以只在内存中生产一个对象,类图如图8-5所示。
1700457720
1700457721
1700457722
1700457723
1700457724 图8-5 工厂方法模式替代单例模式类图
1700457725
1700457726 非常简单的类图,Singleton定义了一个private的无参构造函数,目的是不允许通过new的方式创建一个对象,如代码清单8-20所示。
1700457727
1700457728 代码清单8-20 单例类
1700457729
1700457730 public class Singleton{
1700457731
1700457732 //不允许通过new产生一个对象
1700457733
1700457734 private Singleton(){
1700457735
1700457736 }
1700457737
1700457738 public void doSomething(){
1700457739
1700457740 //业务处理
1700457741
1700457742 }
1700457743
1700457744 }
1700457745
1700457746 Singleton保证不能通过正常的渠道建立一个对象,那SingletonFactory如何建立一个单例对象呢?答案是通过反射方式创建,如代码清单8-21所示。
1700457747
1700457748 代码清单8-21 负责生成单例的工厂类
1700457749
1700457750 public class SingletonFactory{
1700457751
1700457752 private static Singleton singleton;
1700457753
1700457754 static{
1700457755
1700457756 try{
1700457757
1700457758 Class cl=Class.forName(Singleton.class.getName());
1700457759
[ 上一页 ]  [ :1.70045771e+09 ]  [ 下一页 ]