工厂,顾名思义,就是生产东西的地方。在代码开发中生产的“东西”指的是对象,所以通俗来讲工厂模式就是生产对象。使用工厂模式可以把对象的具体创建和使用分开,使用者不必了解对象是如何创建的,只管使用。
工厂模式按照抽象程度的不同具体有三类,分别是简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式:
简单工厂模式主要有三个角色:
抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
工厂类:返回具体产品实例,返回实例的方法一般都是静态方法。
简单工厂模式中只有一个工厂,所有产品的创建都在一个工厂中完成。简单工厂模式中可以使用反射来创建实例。
工厂方法模式:
工厂方法模式与简单工厂模式相比多了一个抽象工厂角色:
抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
抽象工厂:有个抽象方法返回抽象产品类型的对象
具体工厂:返回具体产品实例
工厂方法模式符合开放关闭原则和单一职责原则,但是每增加一个新产品时就需要增加对应的工厂类,使系统类的个数成对增加,加大了开销。
抽象工厂模式:
抽象工厂模式与工厂方法模式相比抽象工厂模式中每一个工厂可以创建多个实例,也就是抽象工厂角色中有多个抽象方法。
抽象产品:定义具体产品类的公共接口
具体产品:抽象产品的具体实现
抽象工厂:有多个抽象方法返回对应的抽象产品类型对象
具体工厂:返回具体产品实例