抽象工厂模式是工厂模式中最抽象的一个工厂模式,引入的产品组的概念,对它的定义就是将一组相关或相互依赖的对象提供接口,而不需要具体的对象,这个定义是很抽象的。

抽象工厂模式包括的角色:

1.抽象工厂类:声明一组用于创建一种产品的的方法

2.具体工厂类:继承了抽象工厂类,创建一组具体产品的对象

3.抽象产品类:所有产品对象的父类,负责描述所有产品实例共有的公共接口

4.具体产品类:抽象产品类的实现类 ,实现某个具体的产品对象

,我们来举个例子:以电脑为例子,电脑A配的是cpuA和显卡A,电脑B配的是cupB和显卡B。

可能这样讲还是有点模糊,看下面的代码实现后,再回来看应该就能明白了:

抽象产品类

public interface Computer {public void work();
}public abstract class Cpu implements Computer{public abstract void work();
}public abstract class DisplayCard implements Computer {public abstract void work();
}

具体产品类

public class CpuA extends Cpu {public void work() {System.out.println("我是电脑A的cpuA");}
}
public class DisplayCardA extends DisplayCard{public void work() {System.out.println("我是电脑A的显卡A");}
}public class CpuB extends Cpu {public void work() {System.out.println("我是电脑B的cpuB");}
}
public class DisplayCardB extends DisplayCard {public void work() {System.out.println("我是电脑B的显卡B");}
}

抽象工厂类

public interface ComputerFactory {public Cpu getCpu();public DisplayCard getDisplayCard();
}

具体工厂类

电脑A的具体工厂类
public class ComputerFactoryA implements ComputerFactory {public Cpu getCpu() {return new CpuA();}public DisplayCard getDisplayCard() {return new DisplayCardA();}
}电脑B的具体工厂类
public class ComputerFactoryB implements ComputerFactory {public Cpu getCpu() {return new CpuB();}public DisplayCard getDisplayCard() {return new DisplayCardB();}
}

测试

public class FactoryTest {public static void main(String[] args) {ComputerFactory computerFactoryA = new ComputerFactoryA();Cpu cpuA = computerFactoryA.getCpu();DisplayCard displayCardA = computerFactoryA.getDisplayCard();cpuA.work();displayCardA.work();System.out.println("===========================");ComputerFactory computerFactoryB = new ComputerFactoryB();Cpu cpuB = computerFactoryB.getCpu();DisplayCard displayCardB = computerFactoryB.getDisplayCard();cpuB.work();displayCardB.work();}
}

输出:

抽象工厂特点就是:每个工厂都只是生产自己特定的产品,不同工厂生产的产品实例是不关联的,这需要我们在客户端进行封装的时候就要做好。

缺点:添加一个具体工厂很简单,但是工厂想生产一种新的产品,会修改很多类。因为没加一个新产品,那么就要在抽象工厂里定义创建新产品对象的方法,而其他具体工厂又是实现该抽象工厂。

什么时候用抽象工厂模式呢?

产品多,关系复杂,产品可以抽象出来,那么就适合用抽象工厂模式

设计模式--创建型模式之抽象工厂模式相关推荐

  1. 设计模式系列一创建型之(抽象工厂模式)

    1.抽象工厂简介 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作. 如何应对这种变化? 如何绕过常规的对象的创建方 ...

  2. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

    简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...

  3. 4.5_abstract_factory_创建型模式:抽象工厂模式

    创建型模式 --- 抽象工厂模式--- 内容:定义一个工厂类接口,让工厂子类来创建一系列相关或相互依赖的对象相比工厂方法模式,抽象工厂模式中的每个具体工厂都生产一套产品角色:1. 抽象工厂角色 (Cr ...

  4. [19/04/23-星期二] GOF23_创建型模式(工厂模式、抽象工厂模式)

    一.工厂模式(分为:简单工厂模式.工厂方法模式.抽象工厂模式) 实现了创建者和调用者的分离 核心本质:1.实例化对象,用工厂方法代替new操作:2.将选择实现类.创建对象统一管理和控制,从而将调用者跟 ...

  5. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  6. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

  7. 设计模式:工厂方式模式、抽象工厂模式

    前言 在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象.工厂是构造方法的抽象,用来实现不同的分配方案. 工厂方法模式 工厂方法模式(英语:Factory method pattern)是一种 ...

  8. 设计模式之——简单(静态)工厂模式和抽象工厂模式

    文章目录 [关于设计模式] 设计模式的诞生 设计模式概念与解读 设计模式的原则 [关于工厂模式] 简单工厂(静态工厂)模式的概念 抽象工厂模式 工厂模式的使用时机和注意事项 给自己的思考 [关于设计模 ...

  9. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

  10. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

最新文章

  1. ORACLE 修改SID
  2. 每日一皮:这翻译...真辛苦老外看纪录片纯靠脑补 ...
  3. [Js-Spring]Spring与IoC(控制反转,Inversion of Control)
  4. hdu1466 递推
  5. Marketing Cloud里使用了哪个版本的UI5 Odata模型?
  6. javascript 传多个参数的正则表达式(用来获取某个参数值)
  7. 真正聪明的人,为什么从不去社交?
  8. tensorflow没有这个参数_解决TensorFlow中Batch Normalization参数没有保存的问题
  9. CentOS设置工作区个数
  10. 黑盒测试和白盒测试之间的差别
  11. 如何使用c语言制作微信小程序,不懂代码如何制作微信小程序?微信小程序的步骤?...
  12. android开机自动启动app,android如何实现开机自动启动Service或app
  13. 一阶线性微分方程的初等积分法
  14. 软件测试自我评价范文,软件测试工程师100字自我评价范文
  15. java 二进制转换为十进制_二进制转换十进制 算法解析
  16. 飞机选座——附:东航320选坐攻略
  17. 商汤发布首份业绩报告,数字经济新拐点,商汤的价值逻辑变了吗?
  18. Linux下Oracle开机自启动
  19. 公司拖欠后端工资逼急了可以删库跑路,逼急了前端该如何何去何从?
  20. 网新 恒天Reporting COE的报表开发能力和恒天报表云平台

热门文章

  1. apiDoc 详解 api接口文档生成
  2. 网易云音乐缓存文件解密
  3. et中计算机的快捷键,ET软件快捷键
  4. 【Ngrok】小米球实践-内网穿透【映射本地到外网访问】
  5. 双轨制奖金分配系统,兼顾技术人员老龄化问题
  6. steam授权_验号机器人正式上线,支持检验csgo账号、steam账号信息
  7. 容大热敏打印机打印纸张出半截,测试页不出嗡嗡响
  8. listary文件查找工具下载及使用
  9. JDK1.8 中文开发帮助文档
  10. AD笔记4-元件封装库绘制