抽象工厂模式
2019-05-23 本文已影响0人
落地生涯
一、抽象工厂模式概述
抽象工厂模式提供一个接口,用于创建 相关的对象家族 。抽象工厂模式创建的是对象家族,也就是很多对象而不是一个对象,并且这些对象是相关的,也就是说必须一起创建出来。而工厂方法模式只是用于创建一个对象,这和抽象工厂模式有很大不同。
二、抽象工厂模式结构
抽象工厂模式角色:
(1)抽象工厂(AbstractFactory):客户端直接引用,由未实现的工厂方法组成,子类必须实现其工厂方法创建产品家族。
(2)具体工厂(ConcreteFactory):实现抽象工厂接口,负责实现工厂方法,一个具体工厂可以创建一组产品。
(3)抽象产品(AbstractProduct):产品家族的父类,由此可以衍生很多子产品。
(4)具体产品(Product):衍生自抽象产品,由工厂方法直接创建。
三、代码示例
抽象产品和具体产品:
抽象工厂和具体工厂:
测试代码:
四、抽象工厂模式的优缺点
1、优点
(1)允许客户使用抽象的接口创建一组相关产品,而不需要知道(或者关心)产出的具体产品是什么,这样客户就可以从具体的产品中解耦出来。
(2)一个具体工厂可以创建多个产品,与工厂方法模式相比,可以少产生具体工厂的类数量。
(3)易于交换产品系列,只要更换具体工厂,就可以改变这个产品系列。
2、缺点
(1)抽象工厂是使用组合的方式把工厂方法集合到一个类中,当新增一个产品家族成员时就要修改抽象工厂类及其下面的具体工厂类,所以它的扩展性比较差。
(2)每新增一个产品子类都要创建一个类,当产品子类过多时会产生很多类,导致系统复杂性加大。