1700457590
System.out.println(”\n—造出的第三批人是黄色人种—”);
1700457591
1700457592
Human yellowHuman=HumanFactory.createHuman(YellowHuman.class);
1700457593
1700457594
yellowHuman.getColor();
1700457595
1700457596
yellowHuman.talk();
1700457597
1700457598
}
1700457599
1700457600
}
1700457601
1700457602
运行结果没有发生变化,但是我们的类图变简单了,而且调用者也比较简单,该模式是工厂方法模式的弱化,因为简单,所以称为简单工厂模式(Simple Factory Pattern),也叫做静态工厂模式。在实际项目中,采用该方法的案例还是比较多的,其缺点是工厂类的扩展比较困难,不符合开闭原则,但它仍然是一个非常实用的设计模式。
1700457603
1700457604
2.升级为多个工厂类
1700457605
1700457606
当我们在做一个比较复杂的项目时,经常会遇到初始化一个对象很耗费精力的情况,所有的产品类都放到一个工厂方法中进行初始化会使代码结构不清晰。例如,一个产品类有5个具体实现,每个实现类的初始化(不仅仅是new,初始化包括new一个对象,并对对象设置一定的初始值)方法都不相同,如果写在一个工厂方法中,势必会导致该方法巨大无比,那该怎么办?
1700457607
1700457608
考虑到需要结构清晰,我们就为每个产品定义一个创造者,然后由调用者自己去选择与哪个工厂方法关联。我们还是以女娲造人为例,每个人种都有一个固定的八卦炉,分别造出黑色人种、白色人种、黄色人种,修改后的类图如图8-4所示。
1700457609
1700457610
1700457611
1700457612
1700457613
图8-4 多个工厂类的类图
1700457614
1700457615
每个人种(具体的产品类)都对应了一个创建者,每个创建者都独立负责创建对应的产品对象,非常符合单一职责原则,按照这种模式我们来看看代码变化。
1700457616
1700457617
多工厂模式的抽象工厂类如代码清单8-15所示。
1700457618
1700457619
代码清单8-15 多工厂模式的抽象工厂类
1700457620
1700457621
public abstract class AbstractHumanFactory{
1700457622
1700457623
public abstract Human createHuman();
1700457624
1700457625
}
1700457626
1700457627
注意 抽象方法中已经不再需要传递相关参数了,因为每一个具体的工厂都已经非常明确自己的职责:创建自己负责的产品类对象。
1700457628
1700457629
黑色人种的创建工厂如代码清单8-16所示。
1700457630
1700457631
代码清单8-16 黑色人种的创建工厂实现
1700457632
1700457633
public class BlackHumanFactory extends AbstractHumanFactory{
1700457634
1700457635
public Human createHuman(){
1700457636
1700457637
return new BlackHuman();
1700457638
1700457639
}
[
上一页 ]
[ :1.70045759e+09 ]
[
下一页 ]