前言
GOF对工厂方法模式的解释是
定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象,工厂方法模式让类的实例化程序延迟到子类中实施。
带来的好处:
能针对对象产生的流程定制规则;
能减少客户端参与对象生成的过程,减少客户端与该类的依赖度,便于后续的维护。
工厂方法模式的实现范例
工厂方法模式的实现方式并非固定
第一种:由子类产生
定义一个产生对象的接口(返回对象)。
第二种:在FactroyMethod增加参数
通过一个产生对象的方法,通过id(标记是那个)来确定产生对象的类型;
配合switch使用,但是最好在default使用警告信息。
第三种:采用泛型类实现,与第一种相比,可以省略继承实现的方式;
只需要在创建对象上确定要参数的对象类型。
第四种:FactoryMethod泛型方法
泛型类不使用继承的方式实现,客户端无法获取泛型接口;
所以加上一个FactoryMethod泛型方法,限制product(只能客户端)接收对象。
使用情况
当类的对象产生需要复杂的流程;
需要加载外部资源,如从网络、存储设备、数据库;
有对象上限;
可重复使用;
作者建议使用工程方法模式(第二种方法)来实现一个工厂类,而这个工厂类内还可以搭配其他的设计模式
让对象的产生与管理更有效率。
UML类图
这里定义了一个生成士兵的工程接口,然后在定义了一个具体的士兵生成工程类,里面包含了创建我方士兵和敌方士兵的工厂方法来生成具体对象
<