一、简介
定义:
为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)
。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图:
图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。
引进抽象工厂模式
所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图:
二、Abstract Factory模式的结构:
上图用产品族的概念来解释如下图:
其中分为以下四个角色:
-
抽象工厂(Abstract Factory)角色:
担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
-
具体工厂(Concrete Factory)角色:
这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
-
抽象产品(Abstract Product)角色:
担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
-
具体产品(Concrete Product)角色:
抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。
三、示范程序
该程序演示了抽象工厂的结构,本身不具有任何实际价值。
先看类图:
抽象产品(按钮):
package _3AbstractFactoryPattern;
public interface IButton {
public void click();
}
抽象产品(输入框):
package _3AbstractFactoryPattern;
public interface ITextInput {
public void input();
}
按钮产品实现(windows):
package _3AbstractFactoryPattern;
public class WindowsButton implements IButton {
@Override
public void click() {
System.out.println("windows 按钮点击");
}
}
按钮产品实现(linux):
package _3AbstractFactoryPattern;
public class LinuxButton implements IButton {
@Override
public void click() {
System.out.println("Linux 按钮点击");
}
}
输入框产品实现(windows):
package _3AbstractFactoryPattern;
public class WindowsTextInput implements ITextInput {
@Override
public void input() {
System.out.println("Windows 输入框输入");
}
}
输入框产品实现(linux):
package _3AbstractFactoryPattern;
public class LinuxTextInput implements ITextInput {
@Override
public void input() {
System.out.println("Linux 输入框输入");
}
}
抽象工厂:
package _3AbstractFactoryPattern;
public interface IUICreator {
public IButton createButton();
public ITextInput createTextInput();
}
工厂实现(windows):
package _3AbstractFactoryPattern;
public class WindowsUICreator implements IUICreator {
@Override
public IButton createButton() {
return new WindowsButton();
}
@Override
public ITextInput createTextInput() {
return new WindowsTextInput();
}
}
工厂实现(linux)
package _3AbstractFactoryPattern;
public class LinuxUICreator implements IUICreator {
@Override
public IButton createButton() {
return new LinuxButton();
}
@Override
public ITextInput createTextInput() {
return new LinuxTextInput();
}
}
这其中:button和textinput就是产品等级,而windows和linux两个系列的产品就是产品族。
抽象工厂模式的优点:
- 封装性
- 产品族内的约束为非公开状态
- 扩展产品族非常方便
抽象工厂模式的缺点:
- 扩展产品等级困难,需要修改工厂类的接口.上例中如果需要新增一个panel产品,则需要修改的UICreator接口。
抽象工厂模式的使用场景:
一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。上例中的button和TextInput没有任何关系,但是它们同时被操作系统约束。
分享到:
相关推荐
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
1. 抽象工厂(Abstract Factory):这是模式的核心,它是一个接口或抽象类,定义了一系列创建对象的方法,但并不直接实例化具体的对象。这些方法用于创建一系列相关或相互依赖的对象。 2. 具体工厂(Concrete ...
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现,而是由具体的工厂类来实现。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
抽象工厂(Abstract Factory)模式是一种创建型设计模式,它提供了一种创建对象的接口,但允许子类决定实例化哪一个类。这种模式是基于对象的抽象,而不是具体的类,因此,它允许创建一系列相关的对象,而无需指定...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不直接实现它,而是由子类来具体实现。这个接口通常包含了一系列创建产品对象的方法。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,提供具体...
1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
设计模式抽象工厂模式(AbstractFactory)源代码
在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...
在“AbstractFactory.rar”这个压缩包中,我们可以预想包含了一个简单的示例,用来演示抽象工厂模式的基本概念和应用。 抽象工厂模式的核心在于“工厂”,在软件工程中,工厂是负责创建对象的类或接口。在这个具体...
### C#设计模式之抽象工厂(Abstract Factory)模式详解 #### 概述 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的一种,它提供了一个接口用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的...
抽象工厂(Abstract Factory)模式是设计模式中的一种创建型模式,它提供了一种...在阅读提供的博客文章《AbstractFactory 抽象工厂》和研究压缩包中的相关文件时,你可以深入学习到更多关于这个模式的实践和应用场景。
1. **抽象工厂接口(Abstract Factory)**:定义了创建一组相关或相互依赖对象的接口,而不指定它们的具体类。在这个例子中,可以有一个`MarketFactory`接口,它声明了创建水果和蔬菜的方法,如`createFruit()`和`...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品类。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品(Abstract Product):定义了...