概括

名称

Abstract Factory
结构

动机

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

适用性

  • 一个系统要独立于它的产品的创建、组合和表示时。

  • 一个系统要由多个产品系列中的一个来配置时。

  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。

  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

解析

形象比喻:

ABSTRACT FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
工厂模式:

客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

1.AbstractFactory
      声明一个创建抽象产品对象的操作接口。

2.ConcreteFactory
      实现创建具体产品对象的操作。

3.AbstractProduct
      为一类产品对象声明一个接口。

4.ConcreteProduct
      定义一个将被相应的具体工厂创建的产品*象。
      实现abstractProduct接口。

5.Client
      仅使用由AbstractFactory和AbstractProduct类声明的接口

实例

涉及的文件有

IFactory.java

- ProductFactory.java

IProduct.java

-  SoftwareProduct.java

-  HardwareProduct.java

TestMain.java

都是同一从ProductFactory中获取SoftwareProduct和HardwareProduct的实例。

/**   * @author oscar999   * @date 2013-7-17* @version V1.0   */
package designptn.abstracfac;public interface IFactory {IProduct createSoftProduct();IProduct createHardProduct();
}
/**
* @author oscar999
* @date 2013-7-17
* @version V1.0
*/
package designptn.abstracfac;public class ProductFactory implements IFactory {@Overridepublic IProduct createSoftProduct() {// TODO Auto-generated method stubreturn new SoftwareProduct();}@Overridepublic IProduct createHardProduct() {// TODO Auto-generated method stubreturn new HardwareProduct();}}
/**   * @author oscar999   * @date 2013-7-17* @version V1.0   */
package designptn.abstracfac;public interface IProduct {void product();
}
/**   * @author oscar999   * @date 2013-7-17* @version V1.0   */
package designptn.abstracfac;public class SoftwareProduct implements IProduct {@Overridepublic void product() {// TODO Auto-generated method stubSystem.out.println("Product a Software");}}
/**
* @author oscar999
* @date 2013-7-17
* @version V1.0
*/
package designptn.abstracfac;public class HardwareProduct implements IProduct {@Overridepublic void product() {// TODO Auto-generated method stubSystem.out.println("Product a Hardware");}}
/**   * @author oscar999   * @date 2013-7-17* @version V1.0   */
package designptn.abstracfac;public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubIFactory factory = new ProductFactory();IProduct softProduct = factory.createSoftProduct();IProduct hardProduct = factory.createHardProduct();softProduct.product();hardProduct.product();}
}

与工厂方法的区别

工厂方法强调的是类的实例不再是使用new Class()的方式获取,而是通过定义一个工厂类,从工厂类的方法中获取。

而抽象工厂强调的是同一的调用接口。

[设计模式-创建型]抽象工厂(Abstract Factory)相关推荐

  1. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

  2. 设计模式学习笔记——抽象工厂(Abstract Factory)模式

    设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...

  3. 《研磨设计模式》chap7 抽象工厂 Abstract Factory

    场景:配电脑,多种CPU.主板 1. 正常编码 1.1 cpu //CPU的接口 public interface CPUApi {//示意方法,CPU具有运算的功能 public void calc ...

  4. 设计模式-创建型-抽象工厂

    #pragma once#ifndef ABSTRACTFACTORY_H #define ABSTRACTFACTORY_H // 抽象基类AbstractProductA,代表产品A 的抽象 cl ...

  5. 设计模式(20):创建型-抽象工厂模式(Abstract Factory)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  6. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  7. 设计模式-创建型模式-工厂模式(工厂三兄弟)

    设计模式-创建型模式-工厂模式(工厂三兄弟) 工厂模式分为简单工厂,工厂方法,抽象工厂. 简单工厂模式 一个接口,三个具体类,一个工厂,通过选择,生产出对应的对象. package demo2;pub ...

  8. 设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript

    设计模式-创建型模式-工厂模式(工厂三兄弟) TypeScript 简单工厂模式 定义一个接口,三个具体类.然后书写如下,通过选择,生产出相应的对象 // 定义Shape接口 interface Sh ...

  9. 设计模式--抽象工厂(Abstract Factory)模式

    模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类 类图 应用场景 程序需要处理不同系列的相关产品,但是你不希望它依赖于这些产品的具体类时可以使用抽象工厂模式 优点 1.可以 ...

最新文章

  1. 7个提升PyTorch性能的技巧
  2. “完美论文”过于真实,道出了科研狗的痛
  3. 分数调查 HihoCoder - 1515(带权并查集)
  4. 将数据从 SQL Server 导入 Azure Storage Table
  5. sqlite3_exec
  6. 7-218 修理牧场 (25 分)
  7. python数据结构不常用的方法(哈哈,其实是常用的)
  8. 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题
  9. 1解锁方式9008_黔隆科技刷机教程金立E7忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  10. GBK 汉字内码扩展规范编码表
  11. 使用PyHive操作Hive
  12. win10user文件夹迁移_Win10转移系统盘用户文件到非系统盘的详细步骤
  13. word2007工具栏隐藏了怎样能一直显示?
  14. Java邮件发送(实名发送和匿名发送)
  15. 24券创始人杜一楠的失败检讨书:24券是如何毁在我手上的?[转]
  16. linux发送邮件mail详解
  17. read/write函数
  18. Eclipse中各种编码格式及设置
  19. 如何在Mac上安全的下载BT
  20. 汽车之家精选论坛图片下载

热门文章

  1. IOS-项目中常见文件介绍
  2. 关于opencv的几个小总结
  3. 总结:PHP值得注意的几个问题
  4. 简单就是不复杂 转
  5. HDOJ 1286 HDU 1286 找新朋友 ACM 1286 IN HDU
  6. 关于ng-cloak解决闪现问题的一点坑
  7. 再次遇到golang乱码问题,用simplifiedchinese解决
  8. 【白皮书分享】2020新式茶饮白皮书:数字化进阶-奈雪.pdf(附下载链接)
  9. 【实践】汽车之家推荐系统排序算法迭代之路.pdf(附下载链接)
  10. 基于深度学习的个性化新闻推荐.pdf(附下载链接)