在简单工厂模式中,工厂类负责为所有具体产品类创建对象,因此当新增或修改具体产品类时,也需要修改工厂类,这在一定程度上违背了 OCP 原则。
在工厂方法模式中,不再提供统一的工厂类来创建所有产品对象,而是为不同的具体产品类提供不同的工厂类,系统提供一个与产品等级结构相对应的工厂等级结构。
工厂方法模式是一种创建型模式。在工厂方法模式中,抽象工厂类负责声明用于创建产品对象的公共接口,工厂子类负责创建产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中,即由工厂子类决定实例化哪个具体产品类。
抽象工厂角色
负责声明用于创建产品对象的工厂方法(Factory Method)
具体工厂角色
抽象工厂角色的子类,需要实现抽象工厂中声明的工厂方法
抽象产品角色
为所有具体产品类提供公共的接口
具体产品角色
抽象产品角色的子类,每个具体产品类都对应一个具体工厂类
https://github.com/tim-chow/DesignPattern/tree/master/FactoryMethod