一.什么是工厂模式?

工厂模式分为三种:简单工厂模式(静态工厂模式),工厂方法模式,抽象工厂模式。

二.工厂模式的应用场景是什么?

工厂模式目的是为了满足单一职责原则和开闭原则而将对象的创建和使用进行分离。是一种很常见的架构模式。

三.工厂模式结构图

简单工厂模式

工厂方法模式

抽象工厂模式

四.各类工厂模式的优缺点

简单工厂模式

1.优点

① 实现了对象创建和使用的分离。

② 客户端无需知道所要创建产品的类名,只需要知道传递的参数即可创建出需要的产品,减少了开发人员的记忆量。

③ 通过引入配置文件,可以在不修改客户端代码的情况下修改或增加新的产品类,提高了系统的灵活性。

2.缺点

① 工厂类集中了所有产品的创建逻辑,职责过重,一旦不能正常工作,整个系统都将受到影响。

② 由于引入了工厂类增加了系统的复杂度和理解难度。

③ 系统扩展困难,一旦增加了新的产品就不得不更改工厂逻辑,当产品过多时会照成工厂逻辑复杂,不利于系统的扩展和维护。

④ 由于使用了静态工厂方法,照成工厂角色无法形成基于继承的等级结构。

工厂方法模式

1.优点

① 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还像客户隐藏了那种客户产品类将被实例化这一细节,用户只需关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名。

② 基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。它能够让工厂可以自主确 定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模 式之所以又被称为多态工厂模式,就正是因为所有的具体工厂类都具有同一抽象父类。

③ 使用工厂方法模式的另一个优点是在系统中加入新产品时,无须修改抽象工厂和抽象产品 提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具 体工厂和具体产品就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。

抽象工厂模式

1.优点

① 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离, 更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接 口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

② 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产 品族中的对象。

③ 增加新的产品族很方便,无须修改已有系统,符合“开闭原则”。

2.缺点

① 增加新的产品等级结构比较麻烦,,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,违背了“开闭原则”。