设计模式可复用面向对象软件的基础 第3章 创建(6)
发布时间:2021-06-05
发布时间:2021-06-05
本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用
—声明一个创建抽象产品对象的操作接口。
C o n c r e t e F a c t o r y ( M o t i f Wi d g e t F a c t o r y,P M Wi d g e t F a c t o r y )—实现创建具体产品对象的操作。
A b s t r a c t P r o d u c t ( Wi n d o w s,S c r o l l B a r )—为一类产品对象声明一个接口。 C o n c r e t e P r o d u c t ( M o t i f Wi n d o w,M o t i f S c r o l l B a r )—定义一个将被相应的具体工厂创建的产品对象。—实现 A b s t r a c t P r o d u c t接口。
7. 协作
通常在运行时刻创建一个 C o n c r e t e F a c t r o y类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。
AbstractFactory将产品对象的创建延迟到它的 C o n c r e t e F a c t o r y子类。
8. 效果 A b s t r a c t F a c t o r y模式有下面的一些优点和缺点:
1) 它分离了具体的类 Abstract Factory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。
2) 它使得易于交换产品系列一个具体工厂类在一个应用中仅出现一次—即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。在我们的用户界面的例子中,我们仅需转换到相应的工厂对象并重新创建接口,就可实现从M o t i f窗口组件转换为Presentation Manager窗口组件。
3) 它有利于产品的一致性当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。而 A b s t r a c t F a c t o r y很容易实现这一点。
4) 难以支持新种类的产品难以扩展抽象工厂以生产新种类的产品。这是因为 A b s t r a c t F a c t o r y接口确定了可以被创建的产品集合。支持新种类的产品就需要扩展该工厂接口,这将涉及A b s t r a c t F a c t o r y类及其所有子类的改变。我们会在实现一节讨论这个问题的一个解决办法。
9. 实现下面是实现Abstract Factor模式的一些有用技术:
1) 将工厂作为单件一个应用中一般每个产品系列只需一个 C o n c r e t e F a c t o r y的实例。因此工厂通常最好实现为一个 S i n g l e t o n(3 . 5)。
2) 创建产品 A b s t r a c t F a c t o r y仅声明一个创建产品的接口,真正创建产品是由 C o n c r e t e P r o d u c t子类实现的。最通常的一个办法是为每一个产品定义一个工厂方法(参见 Factory Method(3 . 3))。一个具体的工厂将为每个产品重定义该工厂方法以指定产品。虽然这样的实现很简单,但它却要求每个产品系列都要有一个新的具体工厂子类,即使这些产品系列的差别很小。
C l i e n t—仅使用由 A b s t r a c t F a c t o r y和A b s t r a c t P r o d u c t类声明的接口。
上一篇:WSUS服务器的迁移
下一篇:特种加工论文