设计模式(七)抽象工厂模式

抽象工厂模式:

kit模式,提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。


和工厂方法模式不同的是,抽象工厂模式的工厂方法创建的是一个产品族,每一个产品都位于某个产品等级结构中。

同样,4个角色:

(1)AbstractFactory抽象工厂:声明了一组用于创建一族产品的方法,每个方法对应一种产品。

(2)ConcreteFactory具体工厂:实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品(不是一个产品对象实例),构成一个产品族。

(3)AbstractProduct抽象产品:为每种产品声明接口,抽象产品中声明了产品所具有的业务方法;

(4)ConcreteProduct具体产品:定义了具体工厂生产的具体产品对象,实现在抽象产品接口中声明的业务方法。


什么是产品族:比如相同颜色的正方形、矩形、三角形是一个产品族,不同颜色的正方形是一个产品等级结构,每一个颜色的形状对象都位于某个产品族,并属于某个产品等级结构。在抽象工厂模式,产品族是指有同一个工厂生产的,位于不同产品等级结构的一组产品,比如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中,海尔电视机、电冰箱构成了一个产品族。


总结:

1.优点

(1)隔离了具体类的生产,使得客户不需要知道什么被创建。只需要改变具体工厂的实例,就可以改变系统的行为。

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

(3)增加新的产品族很方便,无需修改已有系统,符合开闭原则。


2.缺点

(1)增加新的产品等级结构很麻烦,需要对原有系统进行较大修改,甚至修改抽象层代码,不符合开闭原则。


3.适用场景

(1)一个系统不依赖于产品类实例如何被创建、组合和表达的细节。

(2)系统有多于一个的产品族,每次只使用其中某一个产品族。

(3)属于同一个产品族的产品将在一起使用。

(4)产品等级结构稳定。

你可能感兴趣的:(设计模式)