跟着《重构》学设计模式——工厂方法与抽象工厂模式
1 | public class YellowHumanFactory extends HumanFactory{ |
工厂方法模式
类型
对象创建型
定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类。
UML
适用性
- 当一个类不知道它所必须创建的对象的类的时候;
- 当一个类希望由它的子类来指定它所创建的对象的时候;
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
结构
代码实现
1 | public interface Human { |
静态工厂方法
也可以使用静态方法来创建简单工厂,但是使用静态方法的缺点是,不能通过继承来改变创建方法的行为。
抽象工厂模式
定义
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
UML
适用性
一个系统要独立于它的产品的创建、组合和表示时。
一个系统要由多个产品系列中的一个配置时。
当你要强调一系列相关的产品对象的设计以便进行联合适用时。
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
优缺点
分离了具体的类,使得易于交换产品系列,有利于产品的一致性。难以支持新种类的产品。