抽象工厂模式的定义:

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
demo:下面使用抽象工厂模式写一个简单的台式机装机的小程序
CPUApi:cpu的接口
MainboardApi:主板接口
AMDCpu:amd cpu
IntelCpu:intel cpu
MSIMainboard:微星主板
GAMMainboard:技嘉主板
Schema1:组合1
Schema2:组合2
ComputerEngineer:装机工程师的工具类
Client:客户端

/*** cpu的接口*/
public interface CPUApi {/*** 示意方法具有运算功能*/public void calculate();
}
/*** 主板接口*/
public interface MainboardApi {/*** 示意方法,主办都具有安装cpu的功能*/public void installCPU();
}
/*** intel cpu*/
public class IntelCpu implements CPUApi {/*** cpu针脚数*/private int pins = 0;public IntelCpu(int pins) {this.pins = pins;}@Overridepublic void calculate() {System.out.println("now is intel cpu, pins = " + pins);}
}
/*** amd cpu*/
public class AMDCpu implements CPUApi{private int pins = 0;public AMDCpu(int pins) {this.pins = pins;}@Overridepublic void calculate() {System.out.println("now is amd cpu.pins = "  + pins);}
}
/*** 技嘉主板*/
public class GAMMainboard implements MainboardApi {/*** cpu 插槽孔*/private int cpuHoles = 0;public GAMMainboard(int cpuHoles) {this.cpuHoles = cpuHoles;}@Overridepublic void installCPU() {System.out.println("now in gam mainboard, cpuHoles = " + cpuHoles);}
}
/*** 微星主板*/
public class MSIMainboard implements MainboardApi{/*** cpu 插槽孔*/private int cpuHoles = 0;public MSIMainboard(int cpuHoles) {this.cpuHoles = cpuHoles;}@Overridepublic void installCPU() {System.out.println("now in msi mainboard, cpuHoles = " + cpuHoles);}
}
public class Schema1 implements AbstractFactory{@Overridepublic CPUApi createCpuApi() {return new IntelCpu(1156);}@Overridepublic MainboardApi createMainboardApi() {return new GAMMainboard(1156);}
}
public class Schema2 implements AbstractFactory{@Overridepublic CPUApi createCpuApi() {return new AMDCpu(939);}@Overridepublic MainboardApi createMainboardApi() {return new MSIMainboard(939);}
}
/*** 装机工程师的类*/
public class ComputerEngineer {/*** 定义装配机器需要的cpu*/private CPUApi cpu = null;/*** 定义装配机器需要的主板*/private MainboardApi mainboardApi = null;/*** 装机过程* @param schema*/public void makeComputer(AbstractFactory schema){prepardHardwares(schema);}/*** 装机准备所需要的配件* @param schema*/public void prepardHardwares(AbstractFactory schema){this.cpu = schema.createCpuApi();this.mainboardApi = schema.createMainboardApi();this.cpu.calculate();this.mainboardApi.installCPU();}}
public class Client {public static void main(String[] args) {ComputerEngineer engineer = new ComputerEngineer();AbstractFactory schema = new Schema1();engineer.makeComputer(schema);}
}

抽象工厂模式的功能:

抽象工厂模式的功能是为了一系列相关对象或相互依赖的对象创建一个接口。从某种意义上讲,抽象工厂其实是一个产品系列,或者是产品簇。

抽象工厂模式的优点:

分离接口和实现
使得切换产品簇变得更加容易

抽象工厂模式的缺点:

不太容易扩展新的产品
容易造成类层次复杂

研磨设计模式--抽象工厂模式相关推荐

  1. 系统架构技能之设计模式-抽象工厂模式

    一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...

  2. 常见设计模式—抽象工厂模式

    设计模式-抽象工厂模式 1.什么是抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其它工厂,是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 2.角色分 ...

  3. 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)

    [JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...

  4. java设计模式---抽象工厂模式

    工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准. 以开发项目的DAO层为例,在项 ...

  5. C++设计模式--抽象工厂模式

    前言 前面有两篇文章分别介绍了简单工厂模式和工厂方法模式,这两种模式都比较常见,今天介绍工厂模式的最后一种,抽象工厂模式. 抽象工厂模式(Abstract Factory Pattern)是所有形态的 ...

  6. python工厂模式 理解_浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  7. 05设计模式——抽象工厂模式

    前言:以下总结来自龙哥---左潇龙博客. 总结的很到位,附上博客链接:http://www.cnblogs.com/zuoxiaolong/p/pattern6.html 抽象工厂模式算是工厂相关模式 ...

  8. [设计模式] ------ 抽象工厂模式

    抽象工厂模式 抽象工厂模式,就是对工厂方法模式加以改进而已,其实就是用简单工厂模式的套路创建各个工厂,后面和工厂模式就一模一样了. 其实就是相当于将创建哪个工厂的权利再次放给调用端. 调用端在调用的时 ...

  9. C++设计模式-抽象工厂模式

    目录 基本概念 代码与实例 基本概念 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,从而无需指定他们具体的类. 抽象工厂的好处: 1. 易于交换产品系列 ...

  10. 深入理解设计模式-抽象工厂模式

    文章目录 一.定义 二.使用场景 三.代码样例 1.需求 2.类图 3.实体类 4.产品类 5.工厂类 6.客户端 四.优缺点 结尾 一.定义 抽象工厂模式隶属于设计模式中的创建型模式,用于产品族的构 ...

最新文章

  1. 小程序 mpvue 生命周期一览
  2. UNICODE与ANSI的区别
  3. 《BI那点儿事》Microsoft 决策树算法
  4. vfp中写入文本文件_VFP文件操作函数用法.doc
  5. 前端面试题汇总(vue+html基础)最新最全
  6. 国际象棋八皇后问题----解决办法
  7. 2018 东北四省赛
  8. Passenger 和 Nginx
  9. 除了叫好也应关注GDPR对数字产业的负效应 | 热评
  10. ARM微控制器与嵌入式系统
  11. ​LeetCode刷题实战488:祖玛游戏
  12. 《我是歌手》网上报名评审
  13. 解决 el-checkbox-group 值为对象的时候 复选框回显问题
  14. 计蒜客一月入门赛:《三个火枪手》题解
  15. 2023第三届人工智能与机器学习国际学术会议(ICMLAI 2023)
  16. OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
  17. 计算统计-Chap6 推断统计的蒙特卡罗方法 (3)蒙特卡罗方法
  18. python+selenium小结5:获取浏览器版本号,当前URL,当前页面title
  19. 计算机主板本身不带,现在新电脑主板带WiFi,实不实用,稳定吗?
  20. 超凡蜘蛛侠2 The Amazing Spider-Man 2 (2014) BT在线观看下载地址

热门文章

  1. Spine 3.8.75报错不能打开:Sorry, an unexpected error has occured. 日志显示Version cannot be null
  2. 四年,新华三安全大变样
  3. 【备忘】年薪50万2018年最新北风网大数据Spark2.0从入门到精通视频教程
  4. JSON对象和JSON数组
  5. UE4 蓝图文档阅读笔记
  6. 懒人查看python源码方法
  7. 解决csdn登陆后复制的方法
  8. 登录瑞友天翼时提示“建立SSl 加密隧道失败,请检查网络连接是否正常或者服务器的协议端口是否正常”,如何处理?...
  9. autohotkey循环
  10. 带grub的软盘镜像制作