设计模式之创建型(3)-抽象工厂模式

1.介绍:
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
2.定义:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
3.模拟场景:
我们还是继续范·迪塞尔的例子,往往这些大牌生活中经常参加一些活动,或是商务活动或是公益活动。不管参加什么活动,加上老范(范·迪塞尔名字太长,以下文中简称老范)的知名度,他的车肯定不少,可能光跑车或者光越野车就有多辆。比如说有跑车(多辆,跑车系列的具体产品)、越野车(多辆,越野车系列的具体产品)、两箱车(多辆,两箱车系列的具体产品)。可能很多大牌明星都是如此的。假设老范家里,某一个车库(具体工厂)只存放某一系列的车(比如说跑车车库只存放跑车一系列具体的产品),每次要某一辆跑车的时候肯定要从这个跑车车库里开出来。用了OO(Object Oriented,面向对象)的思想去理解,所有的车库(具体工厂)都是车库类(抽象工厂)的某一个,而每一辆车又包括具体的开车时候所背的包(某一具体产品。包是也是放在车库里的,不同的车搭配不同的包,我们把车和车对应的背包称作出去参加活动的装备),这些具体的包其实也都是背包(抽象产品),具体的车其实也都是车(另一个抽象产品)。
4.场景分析:
上面的场景可能有点稀里糊涂的,但是用OO的思想结合前面的简单工厂和工厂方法的思路去理解的话,也好理解。
下面让我们来捋一捋这个思路:
抽象工厂:虚拟的车库,只是所有车库的一个概念。在程序中可能是一个借口或者抽象类,对其他车库的规范,开车和取包。
具体工厂:具体存在的车库,用来存放车和车对应的背包。在程序中继承抽象工厂,实现抽象工厂中的方法,可以有具体的产品。
抽象产品:虚拟的装备(车和对应的背包),也只是所有装备的一个概念。在程序中可能是多个接口或者多个抽象类,对具体的装备起到规范。
具体产品:活动参加的具体装备,它指的是组成装备的某一辆车或者背包。它继承自某一个抽象产品。

image


【资料】

https://www.cnblogs.com/toutou/p/4899388.html#_label2

https://www.cnblogs.com/gclokok/p/10029088.html

posted @ 2014-05-28 00:00  李华丽  阅读(228)  评论(0编辑  收藏  举报
AmazingCounters.com