Abstract Factory(抽象工厂)——对象创建型模式
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
- 一个系统要独立于它的产品的创建、组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用是。
- 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
结构:
参与者:
- AbstractFactory
声明一个创建抽象产品对象的操作接口。
- ConcreteFactory
实现创建具体产品对象的操作。
- AbstractProduct
为一类产品对象声明一个接口。
- ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。
实现AbstractProduct接口。
- Client
仅使用由AbstractFactory和AbstractProduct类声明的接口。
协作:
通常在运行时刻创建一个ConcreteFactory类的实例。这一具体的工厂创建具有特定实现的产品对象。为创建不同的产品对象,客户应使用不同的具体工厂。
AbstractFactory将产品对象的创建延迟到它的ConcreteFactory子类。
效果:
AbstractFactory模式有下面的一些优点和缺点:
优点:
- 它分离了具体的类
因为一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离。客户通过它们的抽象接口操纵实例。
产品的类名也在具体工厂的实现中被分离;它们不出现在客户代码中。
- 它使得易于交换产品系列
一个具体工厂类在一个应用中只出现一次——即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。
- 它有利于产品的一致性
当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要。
缺点:
难以支持新种类的产品:难以扩展抽象工厂以生产心种类的产品。因为接口一旦确定,并且使用,未来很难扩展该接口,因为这涉及到所有实现类的修改,是产品设计中的大忌(在《Effective Java》中有提到)。
代码示例:
考虑一个支持多种视感(look-and-feel)标准的用户界面工具包,例如MotifManager和PresentationManager。不同的视感风格为诸如滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观和行为。为保证视感风格标准件的可移植性,一个应用不应该为一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化特定视感风格的窗口组件类将使得以后很难改变视感风格。
AbstractFactory:
public interface WidgetFactory {
public Window createWindow();
public ScrollBar createScrollBar();
}
ConcreteFactory1:
public class MotlfWidgetFactory implements WidgetFactory {
@Override
public ScrollBar createScrollBar() {
return new MoltfScrollBar();
}
@Override
public Window createWindow() {
return new MoltfWindow();
}
}
ConcreteFactory2:
public class PMWidgetFactory implements WidgetFactory {
@Override
public ScrollBar createScrollBar() {
return new PMScrollBar();
}
@Override
public Window createWindow() {
return new MoltfWindow();
}
}
AbstractProduct:
public interface ScrollBar {
}
public interface Window {
}
ConcreteProduct1:
public class MoltfScrollBar implements ScrollBar {
}
public class MoltfWindow implements Window {
}
ConcreteProduct2:
public class PMScrollBar implements ScrollBar{
}
public class PMWindow implements Window{
}
Client:
public Window getWindow(WidgetFactory widgetFactory) {
return widgetFactory.createWindow();
}
public ScrollBar getScrollBar(WidgetFactory widgetFactory) {
return widgetFactory.createScrollBar();
}
在Client中,我们通过抽象工厂(WidgetFactory),来返回抽象产品(Window,ScrollBar)。
完。
分享到:
相关推荐
### 设计模式——Abstract Factory模式的认识 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决在软件设计过程中常见的问题。其中,Abstract Factory模式是23种GoF(Gang of Four)设计模式之一,它...
在设计模式中,Abstract Factory模式是一种用来解决在不指定具体实现的情况下创建一系列相关或相互依赖对象的模式。在本文的上下文中,我们看到它被应用于一个奇幻RPG游戏的角色种族设计,每个种族(如人类、精灵)...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需关心它们的具体实现。在Java或其他...
### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...
今天我们将深入探讨“抽象工厂模式”(Abstract Factory Pattern),它在“深入浅出设计模式四——多区域比萨加盟店生产比萨实现”中得到了应用。这个模式主要用于创建一系列相关的对象,而无需指定其具体的类。 ...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
3. **抽象工厂(AbstractFactory)**:定义创建产品对象的工厂方法,返回抽象产品的实例,工厂方法可以是抽象的或者具体的。 4. **具体工厂(ConcreteFactory)**:实现了抽象工厂中定义的工厂方法,返回具体产品的...
### Java23种设计模式详解 #### 一、创建型模式 ##### 1.1.1 工厂方法模式 **定义**: 工厂方法模式定义了一个用于创建对象的接口,但允许子类决定实例化哪个类。工厂方法让类的实例化推迟到其子类。 **适用性**...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
Java 设计模式 - Abstract Factory Abstract Factory 是一种创建型模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。这个模式的主要优点是客户类和工厂类分开,客户类可以无需修改...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式的主要目的是为了隔离产品对象的创建和使用,使得系统对产品类的依赖降低到最低,同时也方便了产品的扩展和...
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
"设计模式C#实例——大洋系统"这个主题涵盖了五个经典的设计模式:抽象工厂(Abstract Factory)、适配器(Adapter)、桥接(Bridge)、建造者(Builder)以及责任链(Chain of Responsibility)。接下来,我们将...
### 实验七 设计模式——创建型模式 #### 一、实验目的 1. **掌握设计模式:** 通过本实验,学生将深入了解三大类型的23种设计模式,并掌握每种模式的基本工作原理及其适用场景。 2. **应用场景设计:** 学生能够...
创建型模式如单例模式(Singleton)、工厂模式(Factory Method)和抽象工厂模式(Abstract Factory),主要关注对象的创建过程,旨在减少类之间的耦合度。结构型模式如适配器模式(Adapter)、装饰器模式...
《设计模式——可复用面向对象软件的基础》是IT领域中的经典著作,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师合著,他们因此被誉为GoF(Gang of Four)。这本书提出了面向对象设计的23种...
在东北大学设计模式实验1中,学生将深入学习软件工程中的一个重要概念——设计模式。设计模式是经过长期实践,被广泛认可的解决特定问题、在软件设计中反复出现的模板,它代表了最佳的设计实践。这个实验的目标是...