使得创建者与调用者分离
三种实现方式:
- 简单工厂模式:
是根据不同的参数返回不同的实例,只有一个工厂。如果增加新的产品,会修改原来的代码,所以不完全满足OCP原则。
- 工厂方法模式:
不同的产品有不同的工厂(有一个总的工厂的接口)
- 抽象工厂模式:(拥有多个产品类型,有多个产品接口)
用来生产不同产品族的全部产品。
简单工厂模式和工厂方法模式是针对于单个产品
抽象工厂模式是针对于产品族
简单工厂模式和工厂方法模式的对比:
结构复杂度: 简单工厂模式只有一个工厂,工厂方法模式工厂数据随着产品增加而增加
代码复杂度&管理上的难度: 工厂方法模式类多
客户端编程复杂度:工厂方法模式虽然在工厂类结构中引入了接口从而满足了OCP,但是在客户端编码中需要对工厂类进行实例化,而简单工厂模式的工厂类是一个静态类,在客户端无需实例化,这无疑是个吸引人的优点
简单工厂模式不完全满足OCP原则,工厂方法模式满足OCP原则,但是在一般情况下,使用简单工厂模式较多。