开发过程中经常听到工厂这个词,其实根据个人经验,简单工厂用的是比较多的。工厂方法和抽象工厂是GoF23种设计模式中的一种,而我们常使用的简单工厂并不是一种设计模式,可以说是我们自己的一种俗称。
定义
简单工厂: 直接通过一个Factory类创建多个实体类的构造方式。
工厂方法: 一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂:个抽象产品类,每个抽象产品类可以派生出多个具体产品类。一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。
工厂方法与抽象工厂区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
模板
简单工厂
工厂方法
- AbstractProduct : 抽象产品 (在工厂方法模式中只有一个AbstractProduct)
- ConcreteProductXXX : 具体的产品类
- AbstractFactory: 抽象工厂类
- ConcreteFactory: 具体工厂类(每个工厂只能创建一个具体产品)
抽象工厂
- ProductX : 产品接口(抽象工厂中可以有多个产品抽象类)
- ConcreteProductX : 具体产品
- Creator: 抽象工厂类(也可以叫Factory,定义了创建多个产品种类的的接口)
- ConcreateCreateX: 具体工厂
实例
优点
- 将对象的构造与获取隔离
- 面向接口编程,可以动态增加Product/Factory,而且方便单元测试
- 一般还可以在工厂中统一维护一个单例(单例模式、静态方法)
- 广义上讲其实工厂模式也是一种外观模式,屏蔽了具体的创建过程。
缺点
- 增加了多个类/接口,增加了系统的复杂性