简单工厂、工厂方法和抽象工厂三种设计模式都用来帮助我们将对象的实例化部分抽取出来,优化系统结构,在开发中经常使用。三者既有区别,也有联系,今天来对这三种设计模式做一个简单的记录。
概述
- 简单工厂:用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改工厂)
- 工厂方法:用来生产同一等级结构中的固定产品(支持增加新的产品)
- 抽象工厂:用来生产不同产品族的全部产品(支持增加新的产品族,不支持增加新的产品)
简单工厂
一般来说,利用一个静态方法,即将createProduct方法设置为static,将我们所需要的产品类型传入函数参数中(type),在方法内部利用switch/case帮助我们创建产品(Product)。
对于这种方式,如果我们想要增加新的产品,首先需要实现Product接口,其次还需要修改SimpleFactory下的createProduct方法。
工厂方法
可以看到与简单工厂的不同,我们每一个FactoryMethod的实现类只对应生成一种产品,就是说,这里是生成固定产品的。
对于增加新的产品,我们只需实现Product接口,并创建一个新的FactoryMethod实现类去帮助我们创建该产品,而不需要修改其他代码。
抽象工厂
对于抽象工厂来说,它被用来生产不同产品族的全部产品。可以这么理解,ProductA和ProductB是两个不同的品牌,而这两个品牌之下都拥有两个相同类型的产品One和Two。例如华为和中兴是两个不同的品牌,它们旗下均生产手机和路由器两个系列的产品,那么华为和中兴就对应的是A和B,而手机和路由器就对应了One和Two。
这样我们想要增加一个新的产品族,即一个新的系列Three时,只需创建FactoryThree实现AbstractFactory,同时在相应的品牌之下添加新系列的产品即可。但我们需要添加新的品牌时就需要改动代码了。