什么是抽象工厂
关于这个问题,我们可以采用设计模式那本书里面对设计模式的一些规定来介绍。
- 意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。- 别名
Kit- 动机
解决类似于软件的不同视图风格的问题。
这是设计模式书给出的关于抽象工厂的介绍。在对其意图的描述当中,涉及到一系列相关或相互依赖对象。这里应该怎样理解这里所说的相关或相互依赖呢?
首先应当明确的是,这些对象一定不属于同一个类型(type),如果需要产生一系列同一类型的对象,那么可以使用工厂模式来产生。(这里使用的是类型,类和类型的区别,一个简要的解释就是:class is a type,type describe objects, references and functions.)这也是抽象工厂模式和工厂模式的最大不同,抽象工厂产生的一系列对象属于不同的类型,而工厂模式产生的对象都属于同一个类型。
既然已经明确了他们之间肯定是不同类型的对象,现在我们就应该着眼于相关或相互依赖。这也说明了抽象工厂产生的对象一定是有相互关系的,不能是毫无关系的一系列对象。我对于这部分的理解是,这里的相关和相互依赖应该是软件设计层面上的相关或相互依赖,而不是单纯的代码上面的相关。代码层面可以相去甚远,就比如我们在设计软件的时候,可以把相关的元素设计成同一个系列的,但是他们的表现形式可以有很大的不同。
举个简单的例子,在文档编辑器里面图片、文字和音频等可以看成是同一个系列的对象,可以使用一个抽象工厂来生成。
抽象工厂的优点
最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
设计模式的主要作用是降低程序的耦合度,增加各部分的可复用性。我们一定要着眼于这个目标,而不是滥用设计模式。因为设计模式一般都会降低程序的运行效率,所以在确定能给程序带来好的时候才使用相应的设计模式。