抽象工厂模式
Contents
设计模式——抽象工厂模式
概念
抽象工厂模式是工厂方法模式的升级版本,它用来创建一组相关或者相互依赖的对象。
抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。
就是一个工厂里放一些相关的类,使工厂数减少。
优点与缺点
最大的好处便是易于交换产品系列,其次是让具体的创建实例过程与客户端分离,客户端通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离。不会出现在客户代码中。
抽象工厂模式与工厂方法模式的区别
抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。
在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。*也就是说,工厂模式中每个工厂造出来的东西都是同一个类别的,抽象工厂模式中,一个工厂可以造不同类别的东西。
我们依然拿生产汽车的例子来说明他们之间的区别。
奔驰车和宝马称为两个不同的等级结构(两种不同的车);而A空调车和B空调车则称为两个不同的产品族(车的属性)A引擎和B引擎也是不同的产品族。再具体一点,A空调宝马车和B空调宝马车属于同一个等级结构,A空调奔驰车和B空调奔驰车属于另一个等级结构;而A空调轿车和A空调越野车属于同一个产品族(同一个零部件),B空调车轿车和B空调越野车属于另一个产品族(同一个零部件)。
明白了等级结构和产品族的概念,就理解工厂方法模式和抽象工厂模式的区别了.
抽象工厂方法就是一个工厂里生产不同等级结构中的一个(其中一种车)中的不同的配件(不同的车的属性)。
1 | //产品类 |
1 | //工厂类 |
1 | //客户端 |
抽象工厂模式也就是不仅生产引擎,同时生产空调。
也就是车工厂是个父类,有生产引擎,生产空调两个接口。
戴尔工厂,惠普工厂继承它,可以分别生产戴尔引擎+戴尔空调,和惠普引擎+惠普空调。
创建小米工厂时,小米工厂的引擎生产小米引擎,小米工厂的空调生产空调.
假设要多出来生产耳机这个产品,则首先我们需要增加耳麦这个父类,再加上戴尔耳麦,惠普耳麦这两个子类。
之后在PC厂商这个父类中,增加生产耳麦的接口。最后在戴尔工厂,惠普工厂这两个类中,分别实现生产戴尔耳麦,惠普耳麦的功能。
Author: corn1ng
Link: https://corn1ng.github.io/2017/11/21/抽象工厂模式/
License: 知识共享署名-非商业性使用 4.0 国际许可协议