意图:

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

补充:

  抽象产品A : (产品A1 和产品 A2)  

  抽象产品B : ( 产品B1 和 产品B2)

一般情况下:想要创建产品A1和A2

  {
  ProductA a1 = new ProductA1();
  ProductA a2 = new ProductA2();
}

在工厂设计模式中,可以设计一个工厂,由它来提供产品A1和产品A2的创建过程,即
工厂模式
ProductAFactory{
  public static ProductA createProductA1(){
    return ProductA();
  }
  public static ProductA createProductA2(){
    return ProductA2();
  }
}
抽象工厂:

将相似的工厂进行抽象合并 ,是工厂模式的进一步抽象升华
在这个抽象工厂中 A1和B1====A2 和 B2 是有相似关系的

AbstarctFactory{
createProductA(){
// 子类/实现类,可以根据需要创建产品 A1 或产品 A2
}
createProductB(){
// // 子类/实现类,可以根据需要创建产品 B2 或产品 B2
}
}

 动机:

抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。

“工厂”是创建产品(对象)的地方,其目的是将产品的创建与产品的使用分离。
抽象工厂模式的目的,是将若干抽象产品的接口不同主题产品的具体实现分离开。这样就能在增加新的具体工厂的时候,不用修改引用抽象工厂的客户端代码。
使用抽象工厂模式,能够在具体工厂变化的时候,不用修改使用工厂的客户端代码,甚至是在运行时。然而,使用这种模式或者相似的设计模式,可能给编写代码带来不必要的复杂性和额外的工作。正确使用设计模式能够抵消这样的“额外工作 
 实例:

 抽象工厂接口

优点:
1.具体产品从客户代码中被分离出来
容易改变产品的系列
将一个系列的产品族统一到一起创建
缺点:
1.在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口

 

最新文章

  1. Hadoop namenode无法启动
  2. 设置让ASP.NET管道接收所有类型的请求
  3. nssstring 转换大小写
  4. STM32F0xx_TIM基本延时配置详细过程
  5. Gentoo安装配置过程与总结
  6. C++在堆上申请和释放内存 - new & delete
  7. colspan是跨列,rowspan是跨行
  8. php 求两个文件的相对路径
  9. (大数据工程师学习路径)第一步 Linux 基础入门----基本概念及操作
  10. ecshop加入购物车效果(各个页面)
  11. Debian安装fail2ban来防止扫描
  12. [Manacher]【学习笔记】
  13. JavaScript 之存取器属性
  14. java基础点总结
  15. 求f(n)=[n/1]+[n/2]+---+[n/n]的值 简单杂题
  16. JAVA课后作业01
  17. Mentor面向智能家居的IoT方案
  18. linux 文件解锁
  19. EnvironmentError: mysql_config not found问题解决(centos7下python安装mysql-python)
  20. STL-queue和循环队列基本操作的实现

热门文章

  1. 【转】Spark:Master High Availability(HA)高可用配置的2种实现
  2. 专题二:HTTP协议详解
  3. dubbo与springmvc的简单使用
  4. js实现左右点击图片层叠滚动特效
  5. WordPress极简主题Small Cat详细介绍
  6. JavaScript(八)日期对象
  7. HDU_1789_doing homework again_贪心
  8. Redis系列(三)--消息队列、排行榜等
  9. Java中XML数据
  10. 使用lombok注解@Getter @Setter方法代码编译成功,但是没有生成get,set方法