一、抽象工厂UML图
二、产品族、产品结构关键词理解
1、是指位于不同产品等级结构中,功能相关联的产品组成的家族。一般是位于不同的等级结构中的相同位置上。显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族。叫做相图。
二、抽象工厂使用场景
1、例:在现实生活中的汽车牌照没有咱们例子中那么简单。除了国家规定不同类型的车辆所上的牌照不同意外,不同省份的牌照生成规则也不一样,最明显的就是牌照号中那唯一的汉字,比如北京市的牌照就是“京X·XXXXX”,而河北省的牌照就是“冀X·XXXXX”,当然同一省份不同地区的牌照在汉字后面的那个字母也不一样。
2、具体实现
车牌号码:
工厂抽象 类: 车牌号码工厂抽象类
具体工厂类 :北京车牌工厂、河北车牌工厂类 (继承自工厂抽象)
蓝色牌照抽象类
北京蓝色车牌生成类(继承自蓝色牌照抽象类)
河北蓝色车牌生成类(继承自蓝色牌照抽象类)
黄色牌照抽象类
北京黄色车牌生成类(继承黄色牌照抽象类)
河北黄色车牌生成类(继承黄色牌照抽象类)
号码生成算法类 (生成随机号码等方法、被具体的生成类引用:北京黄色车牌生成类等)
3、调用
例:
蓝色牌照抽象类 = [北京蓝色车牌生成类 创建蓝色车牌方法]
二、抽象工厂优缺点
1、抽象工厂模式的优点
抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
2、抽象工厂模式的缺点
产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
3、适用场景
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。