`

设计模式之创建类模式——抽象工厂模式

 
阅读更多

抽象工厂模式(Abstract Factory Pattern)是一种比较常用的模式。

定义:

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。

抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

通用类图:

image

通用代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* A抽象产品类
* @author Administrator
*
*/
publicabstractclassAbstractProductA {
// 每个A产品共有的方法
publicvoidshareMethod() {
}
// 每个A产品相同的方法,不同实现
publicabstractvoiddoSomething();
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 产品A1的实现类
* @author Administrator
*
*/
publicclassProductA1extendsAbstractProductA {
@Override
publicvoiddoSomething() {
// TODO Auto-generated method stub
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 产品A2的实现类
* @author Administrator
*
*/
publicclassProductA2extendsAbstractProductA {
@Override
publicvoiddoSomething() {
// TODO Auto-generated method stub
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* B抽象产品类
* @author Administrator
*
*/
publicabstractclassAbstractProductB {
// 每个B产品共有的方法
publicvoidshareMethod() {
}
// 每个B产品相同的方法,不同实现
publicabstractvoiddoSomething();
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 产品B1的实现类
* @author Administrator
*
*/
publicclassProductB1extendsAbstractProductB {
@Override
publicvoiddoSomething() {
// TODO Auto-generated method stub
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 产品B2的实现类
* @author Administrator
*
*/
publicclassProductB2extendsAbstractProductB {
@Override
publicvoiddoSomething() {
// TODO Auto-generated method stub
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 抽象工厂类
* @author Administrator
*
*/
publicabstractclassAbstractFactory {
// 创建A产品家族
publicabstractAbstractProductA createProductA();
// 创建B产品家族
publicabstractAbstractProductB createProductB();
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 产品等级1的实现类
*
* @author Administrator
*
*/
publicclassFactory1extendsAbstractFactory {
// 只生产产品等级为1的A产品
@Override
publicAbstractProductA createProductA() {
returnnewProductA1();
}
// 只生产产品等级为1的B产品
@Override
publicAbstractProductB createProductB() {
returnnewProductB1();
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 产品等级2的实现类
*
* @author Administrator
*
*/
publicclassFactory2extendsAbstractFactory {
// 只生产产品等级为2的A产品
@Override
publicAbstractProductA createProductA() {
returnnewProductA2();
}
// 只生产产品等级为2的B产品
@Override
publicAbstractProductB createProductB() {
returnnewProductB2();
}
}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* 场景类
*
* @author Administrator
*
*/
publicclassClient {
/**
* @param args
*/
publicstaticvoidmain(String[] args) {
// 定义出两个工厂
AbstractFactory factory1 = newFactory1();
AbstractFactory factory2 = newFactory2();
// 产生A1对象
AbstractProductA a1 = factory1.createProductA();
// 产生A2对象
AbstractProductA a2 = factory2.createProductA();
// 产生B1对象
AbstractProductB b1 = factory1.createProductB();
// 产生B2对象
AbstractProductB b2 = factory2.createProductB();
// 业务处理
}
}

抽象工厂模式的优点:

  1. 封装性,每个产品的实现类不是高层模块要关心的,高层模块只关心抽象和接口,不关心对象是如何创建出来的。
  2. 产品族内的约束为非公开状态。具体的产品族内的约束是在工厂内实现的。

抽象工厂模式的缺点:

抽象工厂模式的最大缺点就是产品族扩展非常困难。例如增加产品C,也就是说产品家族由原来2个增加到3个,抽象类AbstractFactory要增加一个方法createProductC(),然后两个实现类都要修改。

抽象工厂模式的使用场景:

抽象工厂模式的使用场景非常简单:一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。

抽象工厂模式的注意事项:

抽象工厂模式的缺点是产品族扩展比较困难,但是不是产品的等级。

抽象工厂模式的产品等级非常容易扩展,增加一个产品等级,只要增加一个工厂类负责新增加出来的产品生产任务即可。也就是说横向扩展容易,纵向扩展困难。

分享到:
评论

相关推荐

    C#抽象工厂实例,设计模式

    抽象工厂模式帮助你控制一个应用创建的对象的类,因为一个工厂封装创建产品对象的责任和过程。它将客户和类的实现分离,客户通过他们的抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户...

    Java设计模式 版本2

    Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...

    Python设计模式之抽象工厂模式原理与用法详解

    本文实例讲述了Python设计模式之抽象工厂模式原理与用法。...设计模式——抽象工厂模式 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的类 import sys #抽

    C++设计模式原理与实战视频课

    2-8 抽象工厂的实用工程技术——抽象工厂的使用场景 2-9 构建者模式Builder的定义、场景与实现 2-10 构建者模式的实用工程技术——代码的坏味道:算法与对象构建的隔离 2-11 原型模式的定义场景与实现——对象的快速...

    (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现

    创建型模式顾名思义是处理对象创建的设计模式,降低复杂度,创建复杂对象时使用。 工厂模式 在类中实现一个接口创建指定对象,使一个类的实例化延迟到了子类。简单来说把类的创建都封装起来,只需要调用一个子类

    设计模式--可复用面向对象软件的基础

    3.1 ABSTRACT FACTORY(抽象工厂)——对象创建型模式 3.2 BUILDER(生成器)——对象创建型模式 3.3 FACTORY METHOD(工厂方法)——对象创建型模式 3.4 PROTOTYPE(原型)——对象创建型模式 3.5 SINGLETON(单件...

    设计模式可复用面向对象软件的基础.zip

    3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 ...

    抽象工厂模式 源代码

    ——探索设计模式系列之三 Terrylee,2005年12月12日 概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过...

    Java设计模式——工厂设计模式

    抽象工厂模式 面向对象设计的基本原则: OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。 DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对...

    java设计模式

    9.3.3 抽象工厂模式的使用场景 9.3.4 抽象工厂模式的注意事项 9.4 最佳实践 第10章 模板方法模式 10.1 辉煌工程—制造悍马 10.2 模板方法模式的定义 10.3 模板方法模式的应用 10.4 模板方法模式的扩展 10.5 最佳实践...

    从模式讲到设计模式再到面向对象设计模式

    目前最有影响力的书籍是:《设计模式:可复用面向对象软件的基础》,它共编录了23种设计模式,分三大类别:创建型模式、结构型模式、行为模式,其中有一种创建型模式是抽象工厂设计模式。 在学习抽象工厂设计模式...

    C++设计模式之抽象工厂模式

    之前讲到了C++设计模式——工厂方法模式,我们可能会想到,后期产品会越来越多了,建立的工厂也会越来越多,工厂进行了增长,工厂变的凌乱而难于管理;由于工厂方法模式创建的对象都是继承于Product的,所以工厂方法...

    24种设计模式介绍与6大设计原则

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    深入浅出设计模式(中文版)

    3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...

    Java设计模式:工厂模式——图文+代码示例(通俗易懂)

    工厂模式最主要解决的问题就是创建者和调用者的耦合,那么代码层面其实就是取消对new的使用。 工厂模式有三种: 1. 简单工厂模式 2. 工厂方法模式 3. 抽象方法模式 先来看看,简单工厂模式——也叫静态工厂模式,...

    深入浅出设计模式(中文版电子版)

    3.3AbstractFactoryPattern(抽象工厂模式) 45 3.3.1定义 45 3.3.2现实例子——扩展了的兵工厂 48 3.3.3C#实例——大陆生态系统 49 3.3.4Java实例——电脑产品 52 3.3.5优势和缺陷 57 3.3.6应用情景 57 3.4...

    设计模式Demo

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    设计模式(四)——工厂模式

    工厂模式 实现了创建者和调用者的分离。将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦。从而提高项目的扩展和维护性。 核心本质 实例化对象,用工厂方法代替new操作。 将...

    饮料商城系统源代码和报告(本次实验要求使用几种特定的设计模式,完成业务功能完整的应用程序)

    在抽象工厂模式中,接口负责创建相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。在本系统中,抽象工厂模式的实现涉及到可乐生产工厂类、百事可乐类、可口可乐类等。 (4)

    design-pattern-java.pdf

    工厂三兄弟之抽象工厂模式(二) 工厂三兄弟之抽象工厂模式(三) 工厂三兄弟之抽象工厂模式(四) 工厂三兄弟之抽象工厂模式(五) 单例模式-Singleton Pattern 确保对象的唯一性——单例模式 (一) 确保对象的...

Global site tag (gtag.js) - Google Analytics