作者 | 小灰

来源 | 程序员小灰(ID:chengxuyuanxiaohui)

—————  第二天  —————

————————————

首先,肯德基提供了众多基础菜品,比如鸡翅、汉堡、薯条、沙拉、可乐等等:

这些琳琅满目的菜品虽好,但有些顾客犯了选择困难症,不知道该选什么好。

于是肯德基对这些菜品做了一定的组合,推出了各种各样的套餐。比如A套餐,包括汉堡/薯条/可乐;B套餐,包括汉堡/鸡翅/沙拉/可乐:

套餐不但搭配合理,而且价钱相对便宜,顾客可以更方便地做出选择,餐厅的销量也得到了提升。

餐厅为顾客提供餐饮服务,和团队协作开发项目又有哪些相似之处呢?

假设小灰在维护一个底层模块的代码,该模块提供了5个基础功能,这些功能对外封装成了5个接口:

某一天,团队里的程序媛小红跑过来和小灰对接:

过了几天,小红又跑过来和小灰对接:

小灰的想法如下:

这里所谓的“套餐”,就是底层细粒度接口的不同组合。在保留底层接口不变的前提下,中间层为调用方提供了便利。

这正是外观模式(Facade Pattern)的设计思想:

To make a complex subsystem easier to use, a simple interface should be provided for a set of interfaces in the subsystem.

为了使复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。

上图中,几个SubSystem类对应着我们刚才所说的底层基础功能,而Facade类对应着中间层,为调用方提供“套餐”服务。

public class SubSystemA {public void methodA(){System.out.println("执行方法A");}

public class Facade {public void comboMethodA(){SubSystemA subSystemA = new SubSystemA();SubSystemB subSystemB = new SubSystemB();SubSystemD subSystemD = new SubSystemD();subSystemA.methodA();subSystemB.methodB();subSystemD.methodD();}public void comboMethodB(){SubSystemE subSystemE = new SubSystemE();SubSystemD subSystemD = new SubSystemD();SubSystemB subSystemB = new SubSystemB();subSystemE.methodE();subSystemD.methodD();subSystemB.methodB();}
}

public class Client {public static void main(String[] args) {Facade facade = new Facade();//通过外观模式,调用组合接口Afacade.comboMethodA();//通过外观模式,调用组合接口Bfacade.comboMethodB();}
}

更多精彩推荐
☞太牛了!30 年开源老兵,10 年躬耕 OpenStack,开源 1000 万行核心代码!
☞TikTok 到底卖的是什么?
☞雷军:小米MIX α量产难度太大已放弃;iPhone 12系列将支持北斗导航;TypeScript 4.0 RC发布|极客头条
☞收藏!美国博士明确给出Python的高效学习技巧
☞垃圾回收策略和算法,看这篇就够了
☞2020 以太坊技术及应用大会·中国圆满落幕,大咖们的演讲精华都在这里了!
点分享点点赞点在看

漫画:设计模式之 “外观模式”相关推荐

  1. JS常用的设计模式(7)—— 外观模式

    JS常用的设计模式(7)-- 外观模式 外观模式(门面模式),是一种相对简单而又无处不在的模式.外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用. 用一段再简单不过的代码来表示 var ...

  2. Swift 中的设计模式 #3 外观模式与适配器模式

    作者:Andrew Jaffee,原文链接,原文日期:2018-09-04 译者:郑一一:校对:BigNerdCoding,pmst,Forelax:定稿:Forelax 本文是我的设计模式系列教程的 ...

  3. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  4. 移动开发 | Swift 中的设计模式 #3 外观模式与适配器模式

    本文是我的设计模式系列教程的第三篇.在第一篇文章中,我介绍了 创建型模式中的工厂模式和单例模式.在第二篇文章中,又讨论了一下 行为型模式中的观察者模式和备忘录模式. 在本文中,我会就结构型模式中的外观 ...

  5. 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  6. [设计模式C++]外观模式

    系列文章总结一些比较常见的设计模式,外观模式是由GoF提出的23种设计模式的一种,使用非常简单. 2021-09-16 增加一个例子 区别于代理模式,都像是插入第三者,但是外观模式是统筹管理子系统,就 ...

  7. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  8. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. java外观设计修改_Java设计模式之外观模式和装饰器模式的设计(精选)

    前言 本篇来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接 ...

最新文章

  1. 在O(1)时间删除链表节点
  2. pandas使用dropna函数删除dataframe中全是缺失值的数据列(drop columns with all missing values in dataframe)
  3. 智源论坛报名 | 智能信息检索与挖掘报告会(9月17日)
  4. ZCF提出解决零确认交易安全问题新方案
  5. 为什么传值时加号变成了空格_为什么中英文字间距不一样?我想谈谈我的理解...
  6. VB6.0 怎样启用控件comdlg32.ocx
  7. linux下raid磁盘阵列的命名,linux – mdadm – raid设备名称在重新启动时更改
  8. iOS 多线程技术总结
  9. nagios监控mysql服务_nagios监控mysql及邮件报警
  10. idea自动构建web项目_构建Web应用程序以自动执行系统管理员任务
  11. 敏捷开发般若敏捷系列之三:什么是敏捷(下)(无住,不住于空,破空执,非法,非非法)...
  12. JavaScript菜鸽子基础知识总结(一)
  13. 0基础学python要多久-怎么自学python,大概要多久?
  14. tf.concat, np.concatenate
  15. LaTeX 中常用的导数符号命令
  16. 网络拓扑结构的优缺点分析
  17. RadioGroup+Fragment+PulltorefreshScrollView+GridView+侧拉菜单+TabLayout+ViewPager
  18. 无法启动此程序因为计算机丢失d3dx9,无法启动此程序.因为计算机中丢失d3dx9_43.dll.尝试重新安装改程序以解决问题...
  19. sql float保留两位
  20. joycon 连不上_switch手柄连接不上ns 连接不上蓝牙手柄硬件等问题解决方案

热门文章

  1. 模拟人类医生,自动生成靠谱医学报告,腾讯医典创新方法入选CVPR 2021
  2. SAP变式配置的完整指南(中英文双语版)
  3. SAP PM 初级系列20 - 维修工单的检验批
  4. SAP QM 源检验(Source Inspection)功能展示
  5. SAP SD基础知识之文本确定(Text Determination)
  6. 做人工智能必看的45篇论文(附下载地址)
  7. 「图像分割模型」全景分割是什么?
  8. 马尔科夫、最大熵、条件随机场
  9. Python 之 matplotlib (十)Image
  10. PNAS前沿:迈向作为多层学习的进化理论