设计模式学习笔记:Abstract Factory(抽象工厂)

来源:互联网 发布:剑网3脸型数据下载 编辑:程序博客网 时间:2024/06/13 01:51

        Abstract Factory概要

        Abstract Factory模式是一种对象创建模式,意图是提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们(一系列对象)具体的类。

        应用场景

        Abstract Factory主要使用于以下几种系统设计场景:

        1)一个系统要独立于它产品的创建、组合和表示;

        2)一个系统要由多个产品系列中的一个来配置;

        3)在系统中强调一系列相关产品对象的设计以便进行联合使用;

        4)提供一个产品类库,而只公开它们的接口而不是实现。

        模式结构

        Abstract Factory模式结构可以用下图来表示,该图表示了各类之间的关系:

                       Abstract Factory结构模式图

        从上面的模式结构图中我们可以看出,Abstract Factory模式主要有如下5个参与者:

        1)AbstractFactory:用来声明创建抽象产品对象的接口,如图中CreateProductA()、CreateProductB()

        2)ConcreteFactory:通过重写父类的操作,实现创建具体产品对象的操作

        3)AbstractProduct:为一类产品对象声明一个接口

        4)ConcreteProduct:通过实现AbstractProduct接口定义一个被相应的(ConcreteFactory)具体工厂创建的具体的产品对象

        5)Client:仅使用AbstractFactory和AbstractProduct声明的接口

        通过上述方式,客户可以在运行时刻创建ConcreteFactory的实例,这一具体工厂,可以创建有特定实现操作的具体产品对象,如果要创建不同的产品对象,客户则需要使用不同的具体工厂,另外这种设计方式可以延迟产品对象的创建,即AbstractFactory可以延迟产品对象的创建到它的ConcreteFactory子类

        AbstractFactory的优缺点

        AbstractFactory采用这种设计方式可以起到1)分离具体的类、2)易于交换产品系列、3)有利于产品的一致性的作用,但缺点也是很明显的----不利于扩展(不利于使用新种类的新产品),这时因为AbstractFactory类中确定了可以被创建的产品对象的集合,如果有新的产品对象需要创建,则需要改变AbstractFactory类的接口,这将导致AbstractFactory类及其所有子类发生改变。

        AbstractFactory的实现

        在实现AbstractFactory的时候需要注意以下两点:

        1)通常一系列产品产品对象只需要一个ConcreteFactory实例,所以工厂的实现一般采用单件Singleton。当然这只是一般情况,涉及到具体情况就要具体分析了。

        2)AbstractFactory仅声明一个产品创建的接口,而具体实现则是由ConcreteFactory实现的,所以通常的做法是为每一个产品定义一个工厂方法(FactoryMethod),一个具体的工厂则重定义该工厂方法来指定产品完成产品的创建。


参考:《Design Patterns:Elements of Reusable Object-Oriented Software》- Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides.

原创粉丝点击