1、概述
工厂模式属于创建型模式,包括简单工厂模式(不属于设计模式)、工厂方法模式、抽象工厂模式。工厂模式的主要作用是实现产品使用者与产品创建者之间的解耦,适用于产品对象的创建经常变动的场景。
2、各个模式详述
2.1 简单工厂
简单工厂不属于23种设计模式中的一种,仅是一种编程习惯,它将对象创建部分的代码进行了封装,将可能发生变化的部分进行了隔离,当需要新增对象事,仅需改变对象创建部分的代码,使用对象部分不受影响。将创建对象的代码集中在一个对象中,可以避免代码的重复,并且更方便后期的维护。这种方法由于其代码量少,实现简单,对于对象创建改变不大的场景应用十分广泛,但由于其新增类型时需修改代码,不适合对象创建变动较频繁的场景。
2.2 工厂方法
工厂方法就是父类定义对象创建函数(C++中的虚函数),由子类来实例化该函数,完成对象的创建(子类继承父类,并重写父类的虚函数)。工厂方法将对象的创建从使用中解耦,增加对象或改变已有对象的实现,不会影响使用者功能。
2.3 抽象工厂
抽象工厂允许客户使用抽象的接口来创建一组相关的对象(对象组合),而不需要知道实际创建的具体对象是什么,将客户从所使用的实际对象创建中解耦。适用于创建一组相关对象的场景,比如种花,都需要种子、肥料、花盆,但是不同类型的花,种子、肥料、花盆是有差别的,此时可以用一个抽象接口来创建一个种花所需材料的对象组合,子类继承该接口,创建特定类型花种植所需材料组合。抽象工厂模式比工厂方法模式多了一层抽象,可以看做是将多个工厂方法按每种关系进行组合,减少了工厂的数量。不足之处在于,如果对象组合变化,需要修改代码。