创造性设计模式

创造型模式主要是为了实例化类所用。进一步又分为类创建、对象创建模式。

类创建模式

类创建模式主要基于继承方式进行实例化

对象创建模式

对象创建模式主要基于委托机制进行实例化

Abstract Factory 抽象工厂模式

抽象工厂常常 基于 几个类似的类中,创建指定的实例。

目标

  • 提供一个接口,创建相似的或关联的对象,而不需要指定它们
  • 封装了很多可能的“平台”,可以创建一系列“产品”
  • new 操作被认为是不友好的

问题

如果应用是可移植的,则需要封装平台依赖关系。
将创建相似的或依赖的对象抽象出来而不是直接指定它们的创建类。
“factory” 对象负责提供创建对象的服务,Client不需要直接创建对象。它们访问factory获取对象。

这种机制保证了交换“产品”变得容易,因为指定的类只需要出现一次—在初始化的时候。
应用可以通过实例化一个不同的工厂来批量的替换大量的产品。

由于工厂对象对象的行为是非常普遍的,所以一般使用单例实现。

结构模式

一个抽象工厂 AbstractFactory 定义了一个工厂方法。
每个工厂方法封装了 new 操作。

抽象工厂的目的是为创建相关对象的系列提供一个接口。
这种模式是在日本汽车制造中的钣金冲压设备中发现的。
冲压设备是一家生产汽车车身零件的抽象工厂。同样的机械用于冲压右门,左手门,右前挡泥板,左前挡泥板,风帽等。

Builder、Prototype、AbstractFactory 模式

Builder 模式侧重于一步一步地构建复杂对象。
抽象工厂则强调一组或一类产品对象(简单或复杂的)。
Builder 在最后一步返回产品对象。
抽象工厂则会立即返回产品对象。
Prototype 通过copy产生对象。

示例场景描述

芯片制造商B可以制造CPU、MMU,且分别适用于的架构模式。亦即是说:
制造商可以制造 基于 EMBER 架构的CPU、MMU 、和基于 ENGINOLA 架构的CPU、MMU。
制造商拥有基于 EMBER 架构 的工具、 基于 ENGINOLA 架构 的工具,都能生产CPU、MMU。

于是对于用户A而言,只需要告知厂商B,选择需要制造 架构 EMBER 。

此时,根据选择的架构通过抽象工厂得到相应的工具。
客户A再根据工具选择生产CPU还是MMU均可。

代码示例如下:

package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public abstract class AbstractCpu {}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public abstract class AbstractMmu {}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public enum Architecture {/****   this field*/ENGINOLA,/****   this field*/EMBER
}
package creational.absfactory;
/**
*
*   @author Byron
*   @date
*/
public class EmberToolkit extends AbstractFactory {@Overridepublic AbstractCpu createCPU() {return new EmberCpu();}@Overridepublic AbstractMmu createMMU() {return new EmberMmu();}
}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public abstract class AbstractFactory {private static final EmberToolkit EMBER_TOOLKIT = new EmberToolkit();private static final EnginolaToolkit ENGINOLA_TOOLKIT = new EnginolaToolkit();/***  Returns a concrete factory object that is an instance of the*  concrete factory class appropriate for the given architecture.*/static AbstractFactory getFactory(Architecture architecture) {AbstractFactory factory = null;switch (architecture) {case ENGINOLA:factory = ENGINOLA_TOOLKIT;break;case EMBER:factory = EMBER_TOOLKIT;break;default: System.err.println("ERROR"); break;}return factory;}/***   to do*   @param*   @return*/public abstract AbstractCpu createCPU();/*** 创建一个MMU* @return*/public abstract AbstractMmu createMMU();
}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class EnginolaToolkit extends AbstractFactory {@Overridepublic AbstractCpu createCPU() {return new EnginolaCpu();}@Overridepublic AbstractMmu createMMU() {return new EnginolaMmu();}
}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class EnginolaCpu extends AbstractCpu {}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class EnginolaMmu extends AbstractMmu{}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class EmberCpu extends AbstractCpu {}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class EmberMmu  extends AbstractMmu{}
package creational.absfactory;/**
*
*   @author Byron
*   @date
*/
public class Client {public static void main(String[] args) {AbstractFactory factory = AbstractFactory.getFactory(Architecture.EMBER);AbstractCpu cpu = factory.createCPU();}
}

【设计模式】之抽象工厂模式相关推荐

  1. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  5. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  6. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  7. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  8. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  9. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  10. java 工厂模式的写法_Java23种设计模式之抽象工厂模式

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

最新文章

  1. HDU 1166 敌兵布阵
  2. VTK:PolyData之CleanPolyData
  3. Java注解--Java深度历险(转)
  4. 如何填写微软2007MVP申请表格以及相关建议
  5. 给你的ABAP对象打上标签(Tag)
  6. 在河北当中学老师用不用考计算机,河北省教育厅出台新方案 师范生当教师也需考证...
  7. LeetCode 705 Design HashSet 解题报告
  8. python ---单例(Singleton)
  9. php找不到phpmyadmin,phpMyAdmin 安装配置方法和问题解决
  10. 多语言版本网站建设数据库设计和考虑的因素
  11. UVA12633 Super Rooks on Chessboard
  12. CIO们拼命都想上的“网红”中台,也有它的另一面
  13. day01:关于惯性导航工具箱的学习与使用:use of the progen
  14. 用Elasticsearch构建电商搜索平台,一个极有代表性的基础技术架构和算法实践案例...
  15. 监测生命体征、活动水平的可穿戴电子产品设计方案
  16. Skin++ For VS2010 使用教程
  17. easyui datagrid 点击其它 单元格,不让头列 checkbook 选中
  18. android 字幕跑马灯,led跑马灯字幕
  19. 【CZY选讲·逆序对】
  20. 中文编程语言——易语言,到底是用来干什么的?易语言值得学习吗?易语言的优势有什么?

热门文章

  1. 结对项目-小游戏连连看
  2. 62%中国AI毕业生赴美,机器学习人才最高产大学出炉
  3. 14. Juju and Binary String
  4. 一个学员去了互联网大厂一个笔试题分享
  5. Windows 11 即将问世 | Windows 10 和 Windows 11 该如何抉择
  6. 如何成为一个自由职业者?
  7. 【java基础】数据类型是啥?有啥用?
  8. 初级前端工程师课程导航-姜威-专题视频课程
  9. 清华大学计算机系董教授,董占民-清华大学物理系
  10. 编写一个程序实现输入一个英文字母,如果是小写字母将其转换成大写输出,如果是大写字母则直接输出。