layout: post title: 设计模式(三) 抽象工厂模式 tags:

  • Design_Patterns categories:
  • Design_Patterns description: 我运用了工厂方法模式 建设了我的火锅帝国 但是仔细想一想 火锅工厂方法模式还是有点脱离实际 我们从始至终都把火锅当成一个不可分割的整体 但是仔细想想火锅是一个整体吗? 各种配料 各种这些配料的供应商 为了做大做强 我们需要自己的子公司 自己的配料公司 由他们给我提供优质的配料 例如 花椒 辣椒 地沟…不..优质菜油 酱料........

设计模式(三) 抽象工厂模式

1. 绕不开的火锅

我运用了工厂方法模式 建设了我的火锅帝国 但是仔细想一想 火锅工厂方法模式还是有点脱离实际

我们从始至终都把火锅当成一个不可分割的整体 但是仔细想想火锅是一个整体吗? 各种配料 各种这些配料的供应商 为了做大做强 我们需要自己的子公司 自己的配料公司 由他们给我提供优质的配料 例如 花椒 辣椒 地沟…不..优质菜油 酱料........而且还要分地域性的 各地有各地的口味.....有的菜需要用嫩辣椒 有的要用老辣椒 有的用辣椒壳 有的用辣椒籽.........你怎么半? ? ?是不是觉得头大?

如果放大这个细节 会发现 我们以前的模式貌似都不适用了 因为火锅对应着一个产品族:

graph BT; shop[火锅类<br/>1.花椒类<br/>2辣椒类<br/>3菜油类] id[1花椒类]-->shop; id2[2辣椒类]-->shop; id3[3菜油类]-->shop; id5[.....]-->shop;

火锅是由多个产品组成的一个产品 ! ! ! !

所以我们前面的火锅都得忘记掉 ! 完全不适用 !

一个小小的火锅其实一点都不小 ! 他后面有一家花椒工厂 地点在成都 从哪里加工花椒 有江西婺源的采集的油菜花 加工成优质菜油 还有 湖南的辣椒 在长沙保存 运输.........一碗小小的火锅聚集了祖国各地的美味啊 都是大自然的馈赠啊 所以我的火锅店运营理念就是 : 我们不生产火锅 , 我们只做大自然的搬运工 ! ! !

好了好了 回过来? 下面介绍抽象工厂模式

2. 抽象工厂模式

照旧先来个官方点的定义 : 提供一个借口,用于创建相关或依赖对象的家族,而不需要明确指定具体类 他是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂 ? 有点绕 这个源自菜鸟教程

我们的做法就是既然火锅是多个产品组成的 那么我们就抽象出火锅工厂这个接口 用于定义一组相关的产品的获取方法 用不同的具体工厂类实现这个接口

而且生意做大了 店面已经不需要生产火锅了 全部交给工厂就好了 所以店面就是地址不同 进货工厂不同而已

如图:

graph RL; shop[MyStore<br/>private HuoguoAbstractFactory<br/>1.优秀的管理方法]; AbstractFactory{HuoguoAbstractFactory<br/>get花椒 get辣椒 get菜油 get其他}; id[JiangxiFactory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; id1[HuNanFactory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; id2[GuangDongFactory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; id3[.....Factory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; AbstractFactory-->shop;

材料图:材料还有很多..........

graph BT; AbstractFactory{花椒}; id[花椒末]-.实现.->AbstractFactory; id1[花椒籽]-.实现.->AbstractFactory; id2[花椒壳]-.实现.->AbstractFactory; id3[.....]-.实现.->AbstractFactory; AbstractFactory1{辣椒}; id11[辣椒末]-.实现.->AbstractFactory1; id22[辣椒籽]-.实现.->AbstractFactory1; id33[辣椒壳]-.实现.->AbstractFactory1; id44[.....]-.实现.->AbstractFactory1;

组合一下图吧 很复杂 但是思路清晰 大概就这样的结构 铺不开

通过这些具体的工厂获取各种材料

graph BT; shop[MyStore<br/>private HuoguoAbstractFactory<br/>1.优秀的管理方法]; AbstractFactory{HuoguoAbstractFactory<br/>get花椒 get辣椒 get菜油 get其他}; id[JiangxiFactory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; id1[HuNanFactory<br/>get花椒 get辣椒 get菜油 get其他]-.实现.->AbstractFactory; id3[其他实现类]-.实现.->AbstractFactory; AbstractFactory-->shop; dm{花椒}; d1[花椒末]-.实现.->dm; d2[花椒籽]-.实现.->dm; d3[花椒壳]-.实现.->dm; d4[.....]-.实现.->dm; ddm{辣椒}; ddm1[辣椒末]-.实现.->ddm; ddm2[辣椒籽]-.实现.->ddm; ddm3[辣椒壳]-.实现.->ddm; ddm4[.....]-.实现.->ddm; other{其他原料}; dm-->id; ddm-->id; other-->id

这就是抽象工厂模式 它主要是生产一个系列的产品 工厂方法模式 只能生产一个产品

他能对产品族进行很好的解耦合 想想看 如果我开一家武汉店的火锅 然后调查他们的口味 接下来就是积木了 当然如果要扩展接口的话 虽然没人喜欢这么做 因为这是很严重的问题 必须重写全部下面的实现 出现这样的情况 请让你的设计或者产品经理请你来我店里吃火锅吧

3. 总结

抽象工厂方法是针对一个产品族的设计模式 他能很方便的交换一个产品族 实现了很大程度上的分离 和解耦合

但是如果扩展接口的话 会非常麻烦 所以一个良好的设计非常重要

而且抽象工厂模式内部通常会使用工厂模式 或者使用简单工厂模式 或者使用更多的方案 毕竟他是个更大的接口 怎么实现这个模式还得看具体的场景

到这里我的工厂模式就结束了

转载于:https://www.cnblogs.com/Tamako/p/10859693.html

设计模式(三) 抽象工厂模式相关推荐

  1. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  2. 浅析设计模式(三)——抽象工厂模式

    抽象工厂模式(Abstract-Factory,创建型模式) 本文的结构: 一.抽象工厂模式的定义 二.抽象工厂模式的参与者及其角色 三.抽象工厂模式的类图 四.抽象工厂模式的示例 五.参考 一.抽象 ...

  3. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  4. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  5. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  6. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  7. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  8. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  9. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  10. Java 设计模式之抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽 ...

最新文章

  1. 成长与迁移,全球半导体格局演变
  2. win bat 输入参数
  3. SSL与HTTPS,HTTP有什么联系
  4. 【第一季】CH07_FPGA_RunLED创建VIVADO工程实验
  5. 【JAVA基础篇】String类详解
  6. Fiddler抓包 | 竟然有这些骚操作,太神奇了?
  7. Python-cvxopt库的使用(1)(解决LP问题)
  8. flink的MemorySegment
  9. 游戏筑基开发之回调函数(C语言)
  10. imageAI使用教程
  11. 宠物合成养成游戏养猫养牛流量主小程序开发
  12. 新疆旅游攻略-乌鲁木齐
  13. java对象list_java 8 从一个list对象转list对象的属性
  14. ps切图详解以及上传至蓝湖
  15. linux cat 文件乱码
  16. nginx后端节点的健康检查
  17. MySQL(数据类型)
  18. 关于AntMotion动画使用
  19. CND缓存导致用户串了
  20. GD32F103基础教程—工程模板(二)

热门文章

  1. 绘制柱状图,填充不同颜色
  2. 如何把图片裁剪为圆形
  3. Ubuntu/Debian怎么在命令行开启远程桌面共享
  4. python经纬度转换xy坐标公式_python 经纬度和平面坐标相互转换利用米勒坐标系
  5. 需要作废的增值税发票丢失了怎么办
  6. halcon real类型深度图转灰度图、转点云图、拟合平面和测量高度
  7. dw什么运行php,php新手求助,为什么在DW中设计里能看到运行php程序的结果,但…...
  8. 咦,我发现了微信的一个秘密
  9. 你真的理解什么是“财富自由”吗?
  10. 心理学推荐书籍——《色眼识人》