或者说抽象工厂模式与工厂方法模式的区别?
工厂方法模式针对的是一类产品的等级结构,而抽象工厂模式针对的是多个产品等级结构(一个产品族)。
引入概念:产品族与产品等级
产品族:指在不同的产品等级结构中,功能相关联的产品组成的家族。
产品等级:同类产品的不同产品区分。
抽象工厂的作用:
就是创建不同产品等级,但属于同一产品族的产品
那抽象工厂的定义:
创建不同产品等级,但属于同一产品族的产品的工厂的抽象。
那么具体的实现工厂就对应了不同的产品等级下的同一产品族的所有产品。
抽象工厂模式结构:
抽象工厂定义了一个产品族的生产功能,然后交由具体的产品工厂去生产。
注:抽象工厂的接口不是随意堆砌的,而是相互关联或依赖的方法集成在一起的。
例子如下图:以电脑为例
优点:
分离接口与实现
使用抽象工厂来创建所需要的对象,客户端仅仅是面向接口来编程,客户端可以实现从产品中解耦。
使切换产品族变得更容易
因为一个具体的工厂实现代表一个产品族,仅替换实现工厂即可切换。
缺点:
不易扩展
产品族如果有新产品出现,就需要对抽象工厂进行修改,这会导致需要更新所有的工厂类。
实例:
抽象工厂:
public interface AbstractFactory { /** * 创建CPU对象 * @return CPU对象 */ public Cpu createCpu(); /** * 创建主板对象 * @return 主板对象 */ public Mainboard createMainboard(); }