打字猴:1.70045767e+09
1700457670
1700457671 三个具体的创建工厂都非常简单,但是,如果一个系统比较复杂时工厂类也会相应地变复杂。场景类NvWa修改后的代码如代码清单8-19所示。
1700457672
1700457673 代码清单8-19 场景类NvWa
1700457674
1700457675 public class NvWa{
1700457676
1700457677 public static void main(String[]args){
1700457678
1700457679 //女娲第一次造人,火候不足,于是白色人种产生了
1700457680
1700457681 System.out.println(”—造出的第一批人是白色人种—”);
1700457682
1700457683 Human whiteHuman=(new WhiteHumanFactory()).createHuman();
1700457684
1700457685 whiteHuman.getColor();
1700457686
1700457687 whiteHuman.talk();
1700457688
1700457689 //女娲第二次造人,火候过足,于是黑色人种产生了
1700457690
1700457691 System.out.println(”\n—造出的第二批人是黑色人种—”);
1700457692
1700457693 Human blackHuman=(new BlackHumanFactory()).createHuman();
1700457694
1700457695 blackHuman.getColor();
1700457696
1700457697 blackHuman.talk();
1700457698
1700457699 //第三次造人,火候刚刚好,于是黄色人种产生了
1700457700
1700457701 System.out.println(”\n—造出的第三批人是黄色人种—”);
1700457702
1700457703 Human yellowHuman=(new YellowHumanFactory()).createHuman();
1700457704
1700457705 yellowHuman.getColor();
1700457706
1700457707 yellowHuman.talk();
1700457708
1700457709 }
1700457710
1700457711 }
1700457712
1700457713 运行结果还是相同。我们回顾一下,每一个产品类都对应了一个创建类,好处就是创建类的职责清晰,而且结构简单,但是给可扩展性和可维护性带来了一定的影响。为什么这么说呢?如果要扩展一个产品类,就需要建立一个相应的工厂类,这样就增加了扩展的难度。因为工厂类和产品类的数量相同,维护时需要考虑两个对象之间的关系。
1700457714
1700457715 当然,在复杂的应用中一般采用多工厂的方法,然后再增加一个协调类,避免调用者与各个子工厂交流,协调类的作用是封装子工厂类,对高层模块提供统一的访问接口。
1700457716
1700457717 3.替代单例模式
1700457718
1700457719 第7章讲述了单例模式以及扩展出的多例模式,并且指出了单例和多例的一些缺点,我们是不是可以采用工厂方法模式实现单例模式的功能呢?单例模式的核心要求就是在内存中只有一个对象,通过工厂方法模式也可以只在内存中生产一个对象,类图如图8-5所示。
[ 上一页 ]  [ :1.70045767e+09 ]  [ 下一页 ]