设计模式(创建型模式):抽象工厂
介绍了简单工厂与工厂方法之后,现在我们来看一下工厂三兄弟的最后一个 —— 抽象工厂。 那什么是抽象工厂呢?
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象 的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
说起来,抽象工厂与工厂方法类似,但与工厂不同的是抽象工厂不再提供一个单一的抽象产品创建。而是提供了同一产品族不同产品等级结构的创建方式。 这里解释一下两个名词:
产品等级结构 在之前的工厂方法当中,一个工厂只能创建一个产品,这个产品可能会有多层继承产品。 比如说有一个抽象产品电视机,那么可能是苹果手机这一个抽象产品,但是苹果手机有 多个版本,可能会有 IPHONE5s,IPHONE6,IPHONE7,IPHONE7PLUGS。所以产品结构就 是一个产品的继承结构,比如我们之前的工厂方法只能生成苹果手机而已。 产品族 产品族指代的就是由同一个工厂生产的,但是位于不同产品结构中的一组产品。还是 举个例子,苹果公司不可能生产苹果手机,当然他还有苹果电脑,苹果手表等。所以,一 个工厂就是一个产品族。 So,在这里说白了我们就是在之前的工厂方法当中进行了一个扩展,使得抽象工厂类不再产生单一的产品结构,而是可以生产多个不同的产品结构,而实现工厂就是不同的产品族。 抽象工厂实现了开闭原则,即要求系统对扩展开放,对修改封闭,通过扩展达到增强其功能的目的。 在这里增加产品族很方便,只需要增加一个工厂即可,对已有的代码无需任何修改。 但是增加产品结构,必须修改抽象工厂类,然后所有实现类都需要更改,不能很好的支持“开闭原则”。 接下来就上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 // 电脑产品 public abstract class Computer { public abstract void Run(); } // 手机产品 public abstract class Phone { public abstract void Run(); } public class AppleComputer : Computer { public override void Run() { Console.