https://github.com/Wasabi1234/design-patterns
1 简介
- 定义
定义一个创建对象的接口。但让实现这个接口的类决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 - 类型
创建型
通用类图
在工厂方法模式中:
- 抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义
- Creator为抽象创建类,即抽象工厂,具体如何创建产品类是由具体实现工厂ConcreteCreator完成
2 简单工厂模式的升级
案例一
对造人过程进行分析,该过程涉及三个对象:女娲、八卦炉、三种不同肤色的人
- 女娲可以使用场景类
Client
表示 - 八卦炉类似于一个工厂,负责制造生产产品(即人类)
- 三种不同肤色的人,他们都是同一个接口下的不同实现类,对于八卦炉来说都是它生产出的产品
- 接口Human是对人类的总称,每个人种都至少具有两个方法
- 黑色人种
- 黄色人种
- 白色人种
- 所有人种定义完毕,下一步就是定义一个八卦炉,然后烧制。
最可能给八卦炉下达什么样的生产命令呢?
应该是
给我生产出一个黄色人种(YellowHuman类)
而不会是
给我生产一个会走、会跑、会说话、皮肤是黄色的人种
因为这样的命令增加了交流的成本,作为一个生产的管理者,只要知道生产什么就可以了,无需事物具体信息
通过定义泛型对createHuman的输入参数产生两层限制
- 必须是Class类型
- 必须是Human的实现类
其中的T
表示,只要实现了Human接口的类都可以作为参数
只有一个八卦炉,其实现生产人类的方法
人种有了,八卦炉也有了,剩下的工作就是女娲采集黄土,然后命令八卦炉开始生产
人种有了,八卦炉有了,负责生产的女娲也有了
运行一下,结果如下所示