抽象工厂

一、抽象工厂UML图

抽象工厂_第1张图片
抽象工厂模式.png

二、产品族、产品结构关键词理解

1、是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫做相图。

抽象工厂_第2张图片
961E1D7E-7DC8-475E-ADAC-CA95617A8787.jpg

二、抽象工厂使用场景

1、例:在现实生活中的汽车牌照没有咱们例子中那么简单。除了国家规定不同类型的车辆所上的牌照不同意外,不同省份的牌照生成规则也不一样,最明显的就是牌照号中那唯一的汉字,比如北京市的牌照就是“京X·XXXXX”,而河北省的牌照就是“冀X·XXXXX”,当然同一省份不同地区的牌照在汉字后面的那个字母也不一样。

2、具体实现
车牌号码:
工厂抽象 类: 车牌号码工厂抽象类

具体工厂类 :北京车牌工厂、河北车牌工厂类 (继承自工厂抽象)

蓝色牌照抽象类
北京蓝色车牌生成类(继承自蓝色牌照抽象类)
河北蓝色车牌生成类(继承自蓝色牌照抽象类)

黄色牌照抽象类
北京黄色车牌生成类(继承黄色牌照抽象类)
河北黄色车牌生成类(继承黄色牌照抽象类)

号码生成算法类 (生成随机号码等方法、被具体的生成类引用:北京黄色车牌生成类等)

3、调用
例:
蓝色牌照抽象类 = [北京蓝色车牌生成类 创建蓝色车牌方法]

二、抽象工厂优缺点

1、抽象工厂模式的优点

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。

2、抽象工厂模式的缺点

产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

3、适用场景

当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。

你可能感兴趣的:(抽象工厂)