工厂模式涉及的是同一类产品的生产,比如键盘厂只生产键盘,鼠标厂只生产鼠标。但现实中,工厂往往是生产一族产品的,比如计算机外设工厂既能生产键盘,又能生产鼠标,如果生产一族产品采用工厂模式,就要建设多个工厂,显然代价过高,因此为了描述这种现实情况,就引入抽象工厂模式。
工厂模式只生产一类产品,而抽象工厂模式可生产相关联的多类产品,因此抽象工厂模式可以看做工厂方法模式的升级版。
目的 | 该模式提供了一个接口可用于创建一组相关或相互依赖的对象;该模式由子类选择决定具体实例化类。抽象工厂方法模式中工厂类将具体创建产品的工作交给子类去做,仅负责给出具体工厂类必须实现的接口 |
优点 | (1)当管理一个产品族的多个对象时,不要引入多个新类管理,客户端也只需要面对一个产品族对象 (2)增加一类新产品族很容易 |
缺点 | 产品族中增加一个新的产品比较困难,抽象产品和具体产品都需要进行修改 |
应用场景 | (1)当软件系统需要独立进行产品的创建和展示。 (2)当软件系统需要配置多产品多系列中的一个产品时。 (3)联合使用一系列相关产品对象时 (4)建立一个产品类库,只显示接口,不显示实现 |
构成 | 抽象工厂模式由抽象工厂、具体工厂、抽象产品、具体产品等构成,但抽象工厂中方法和抽象产品个数不同 |
备注 | 工厂方法模式关注同等级产品生产,抽象工厂关注一个产品族的产品生产 |