1.工厂方法概念
工厂方法模式,简单来说是来为了解决简单工厂模式所出现的一些缺点而进行的改进。提供一个抽象工厂方法模式,这样就可以避免新增功能的时候修改源代码,只要新建一个类来继承了工厂方法模式即可。
2.工厂方法模式结构
Product:它是定义产品的接口,是工厂方法模式所创建的产品的父类。
ConcreteProduct:具体产品.
Factory:抽象工厂类中声明了工厂方法。
ConcreteFactory:具体的工厂方法,继承了抽象工厂类,用来生产具体的对象。
3.工厂方法优缺点
1.优点:
①可以避免创建者和具体产品之间的紧密耦合。
②单一职责原则。 你可以将产品创建代码放在程序的单一位置, 从而使得代码更容易维护。
③开闭原则。 无需更改现有客户端代码, 你就可以在程序中引入新的产品类型。
2.缺点:
应用工厂方法模式需要引入许多新的子类, 代码可能会因此变得更复杂。 最好的情况是将该模式引入创建者类的现有层次结构中。
4.工厂方法模式的实现方式
①让所有产品都遵循同一接口。 该接口必须声明对所有产品都有意义的方法。
②在创建类中添加一个空的工厂方法。 该方法的返回类型必须遵循通用的产品接口。
③在创建者代码中找到对于产品构造函数的所有引用。 将它们依次替换为对于工厂方法的调用, 同时将创建产品的代码移入工厂方法。 你可能需要在工厂方法中添加临时参数来控制返回的产品类型。
④为工厂方法中的每种产品编写一个创建者子类, 然后在子类中重写工厂方法, 并将基本方法中的相关创建代码移动到工厂方法中。
⑤如果应用中的产品类型太多, 那么为每个产品创建子类并无太大必要, 这时你也可以在子类中复用基类中的控制参数。