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

二. 结构




三. 参与者

Product (Fruit和Leaf两个抽象产物) : 抽象生产者接口;

TreeFruit(树上的水果)、 TreeLeaf(树上的叶子)、 GroundFruit(地上的水果)、 GroundLeaf(地上的叶子) : 实际的自然产物;

NatureFactory: 抽象的自然制造工厂, 用于生产水果和叶子;

TreeFactory、 LeafFactory : 实际的自然制造工厂, 用于生产树上或地上的水果和叶子。

四. 适用性 

- 一个系统独立(解耦)于它的产品的创建、 组合和表示时

- 一个系统要由多个它的产品的创建、组合(以上的自然界需要水果和叶子的组合)和表示时

- 强调一系列相关的产品对象的设计以便进行联合使用时

- 提供一个产品库, 而只想显示接口(面向接口编程)而不是实现时。

五. 具体实现


抽象工厂: 制造大自然中的叶子和水果

package com.wenniuwuren.abstractfactory;
/*** 抽象工厂: 制造大自然中的叶子和水果 * @author wenniuwuren**/
public interface NatureFactory {public Fruit createFruit();public Leaf createLeaf();
}

工厂实现类: 制造地面上的叶子和水果

package com.wenniuwuren.abstractfactory;/*** 工厂实现类: 制造地面上的叶子和水果* @author wenniuwuren**/public class GroundFactory implements NatureFactory {@Overridepublic Fruit createFruit() {return new GroundFruit();}@Overridepublic Leaf createLeaf() {return new GroundLeaf();}}

工厂实现类:制造树上的水果和叶子

package com.wenniuwuren.abstractfactory;/*** 工厂实现类:制造树上的水果和叶子* @author wenniuwuren**/
public class TreeFactory implements NatureFactory {@Overridepublic Fruit createFruit() {return new TreeFruit();}@Overridepublic Leaf createLeaf() {return new TreeLeaf();}}

水果接口:

package com.wenniuwuren.abstractfactory;/*** 水果接口* @author wenniuwuren**/
public interface Fruit {public String product();
}

水果实现类:地上的水果

package com.wenniuwuren.abstractfactory;/*** 水果实现类:地上的水果* @author wenniuwuren**/
public class GroundFruit implements Fruit {@Overridepublic String product() {return "GroundFruit";}}

水果实现类: 树上的水果

package com.wenniuwuren.abstractfactory;/*** 水果实现类: 树上的水果* @author wenniuwuren**/
public class TreeFruit implements Fruit {@Overridepublic String product() {return "TreeFruit";}}

叶子接口:

package com.wenniuwuren.abstractfactory;/*** 叶子接口* @author wenniuwuren**/
public interface Leaf {public String product();
}

叶子实现类: 地上的叶子

package com.wenniuwuren.abstractfactory;/*** 叶子实现类: 地上的叶子* @author wenniuwuren**/
public class GroundLeaf implements Leaf {@Overridepublic String product() {return "GroundLeaf";}}

叶子实现类:树上的叶子

package com.wenniuwuren.abstractfactory;/*** 叶子实现类:树上的叶子* @author wenniuwuren**/
public class TreeLeaf implements Leaf {@Overridepublic String product() {return "TreeLeaf";}}

测试类:Client

package com.wenniuwuren.abstractfactory;public class Client {public static void main(String[] args) {// 生产树上的水果//Fruit fruit = new TreeFruit(); //没用抽象工厂时的调用方法NatureFactory natureFactory = new TreeFactory();Fruit fruit = natureFactory.createFruit();System.out.println(fruit.product()); // 生产树上的叶子Leaf leaf = natureFactory.createLeaf();System.out.println(leaf.product());// 生产地上的水果natureFactory = new GroundFactory();fruit = natureFactory.createFruit();System.out.println(fruit.product()); // 生产地上的叶子leaf = natureFactory.createLeaf();System.out.println(leaf.product());}
}

测试结果:

TreeFruit
TreeLeaf
GroundFruit
GroundLeaf

本文可以和笔者的深入浅出设计模式 ------ Factory Method(工厂方法)参照着看, 可以区分这三个工厂模式的不同。

参考书籍:

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

《Effective Java》

《Head First 设计模式》

深入浅出设计模式 ------ Abstract Factory(抽象工厂)相关推荐

  1. 设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式

    AbstractFactory抽象工厂模式(创建型) 作用: 这种模式支持创建不同的对象,这些对象功能接近且一般都是在一起创建的.抽象工厂被具体化成不同的工厂来创建类似产品的不同产品.这种模式将类于使 ...

  2. 笔记:设计模式(3)-Abstract Factory抽象工厂模式

      工厂模式的起源 1.变化点在"对象的创建",因此就封装"对象创建": 2.面向接口编程,依赖接口,而非依赖实现. 动机(Motivation) 在系统中,经 ...

  3. Java 设计模式之 Abstract Factory 抽象工厂模式

    在工厂方法基础上,将工厂的生产方法的返回类型从具体产品抽象为抽象产品,同时扩展工厂的方法,支持任意定制产品族,则工厂方法可以升级为抽象工厂模式,比如一家餐厅可以提供牛排(方法A),红酒(方法B),蔬菜 ...

  4. Abstract Factory抽象工厂模式

    抽象工厂模式是是用一个超级工厂去创建其他工厂,简单点说就是工厂的父类,属于创建型模式. 目标:提供一个创建一组对象的方法,而无需指定它们具体的类(同工厂方法). 使用场景:系统的产品有多于一个的产品族 ...

  5. 【设计模式】之抽象工厂模式

    创造性设计模式 创造型模式主要是为了实例化类所用.进一步又分为类创建.对象创建模式. 类创建模式 类创建模式主要基于继承方式进行实例化 对象创建模式 对象创建模式主要基于委托机制进行实例化 Abstr ...

  6. 09Abstract Factory(抽象工厂)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Abstract Factory(抽象工厂)模式动机 在软件系统中,经常面临着一系列相互依赖的对象的创建工作.同时,由于需求的变化,往往存在更 ...

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

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

  8. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  9. 设计模式二、抽象工厂模式

    设计模式part2 1.     抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题, ...

  10. JavaScript 23 种设计模式之 4 抽象工厂模式

    JavaScript 23 种设计模式之 4 抽象工厂模式 概念与特点 结构与实现 应用场景 应用实例 总结 概念与特点 概念: 提供一组相关或相互依赖对象的接口.抽象工厂模式是工厂方法模式的升级版, ...

最新文章

  1. 一文读懂云计算、边缘计算、移动边缘计算和自动驾驶的前世今生!
  2. ZZNU 1993: cots' friends
  3. linux下yum安装最新稳定版nginx
  4. 文件服务器 工作站 通信媒体,【2013年自考“网络操作系统”复习资料(22)】- 环球网校...
  5. 函数使用了堆栈的字节超过_单片机地址空间,堆栈理解
  6. 深井软岩巷道群支护技术与应用_引领支护创新,促进行业发展
  7. python 求和并排序_Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法...
  8. matlab期权定价模型比较,期权定价模型与数值方法(Matlab+Jupyter Notebook)
  9. java 内存泄漏问题_Java内存泄露的理解与解决(转)
  10. VS2010_x86_编译错误
  11. Luogu2627 修剪草坪
  12. 笔记本独显和集显linux,笔记本电脑独显不见了的解决方法介绍
  13. 金士顿u盘写保护修复教程
  14. HCIA--华为认证初级网络工程师
  15. python批量图片文字识别_利用Python批量进行图片文字识别
  16. 蓝桥杯-算法训练-跳马
  17. centos7网卡问题
  18. htonl(), ntohl(), htons(), ntohs() 函数具体应用
  19. 苹果电脑MACbookAir快捷键大全
  20. Day431.本地事务分布式事务CAP理论 -谷粒商城

热门文章

  1. 【Java基础教程】Java的输入输出
  2. STM32F1开发指南笔记46----字库原理及汉字库创建
  3. ppt编写一个抽奖系统_PPT图片双屏抽奖系统现场主要操作流程介绍
  4. 一步步教你如何配置Java环境变量(超级详细)
  5. 一键安装 redmine on rhel6.4
  6. js格式化SQL语句
  7. Spring boot 集成mybatis 教程
  8. hadoop安装教程
  9. C语言程序设计(第三版)何钦铭著 习题6-3
  10. 实用新型专利申请文件撰写示例