设计模式——抽象工厂模式
一、概念:抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
二、UML示意图:
这里可以这么理解:ProductA和ProductB可能会有两种不同的实现,但是他们的抽象方法都是一样的,那么可以把ProductA和ProductB都分离出一个抽象类出来AbstractProductA和AbstractProductB,然后继承这两个抽象Product并提供不同的实现。而对应这些不同的实现,则有不同的ConcreteFactory,因为这些ConcreteFactory的抽象方法都是一样的,那就是创建ProductA和ProductB,只是这两个产品的具体实现(也就是继承自抽象Product的类)是不同的而已,所以也可以分离出一个抽象类Factory出来,具体工厂类继承自Factory并提供不同的实现,产生不同的具体工厂类来是创建不同的产品。而客户端只需要知道工厂提供的创建产品的接口,和产品的抽象类而不需要知道产品的具体实现。
三、优缺点
优点:
- 把产品的创建过程分离了出来,客户端无需关心产品是如何创建的,降低了耦合度。
- 有利于为已有产品新增不同的实现,只需要新增具体工厂类,新的产品实现类即可,无需改动源代码。
- 有利于不同产品实现的切换,只需要改动一开始生成具体工厂类实例的代码就好了。
缺点:
- 不符合开闭原则。因为每增加一个产品就要在抽象工厂类中新增一个抽象方法,而继承自这个抽象工厂的各个具体工厂也要跟着增加这个抽象方法的实现。