简介

姓名 :外观模式

英文名 :Facade Pattern

价值观 :统一口径、一致对外

个人介绍 : Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。 (来自《设计模式之禅》)

你要的故事

作为开发同学,我们平时打交道最多的就是需求同学和测试同学,公司小的时候,什么事情都全靠吼,工作也直接一对一,一个需求下来,需求同学先跟开发同学一起跟进这个需求,需求开发完成了,需求同学和测试同学沟通了需求的测试要点,测试同学就开测。这个过程中需求一直跟到上线。我们用代码来描述这个过程。

开发同学,负责开发需求。

/*** 开发同学*/
class Developer {public void develop(String name) {System.out.println("开发需求:" + name);}}
复制代码

测试同学,负责测试需求。

/*** 测试同学*/
class Tester {public void test(String name) {System.out.println("测试需求:" + name);}}
复制代码

需求同学,负责提需求,也负责跟进需求的开发、测试,直到上线。

/*** 需求同学*/
class Demander {private Developer developer = new Developer();private Tester tester = new Tester();public void demand(String name) {System.out.println("提需求:" + name);developer.develop(name);tester.test(name);}}
复制代码

测试代码。

public class FacadeTest {public static void main(String[] args) {Demander demander = new Demander();demander.demand("开发一个跟淘宝一样的系统");}
}打印结果:
提需求:开发一个跟淘宝一样的系统
开发需求:开发一个跟淘宝一样的系统
测试需求:开发一个跟淘宝一样的系统
复制代码

公司小的时候,这样干没啥问题,咱关注的是业务的迭代速度和沟通成本,大家都是在一块办公,随时吼一声完事。当公司发展到一定程度,比如有 100 来人,其中需求 10 人、开发 70 人、测试 20 人,那就没法靠吼来沟通了,需要有一个比较规范化的沟通机制。一般会这样子引进,开发会把一些沟通能力较强、把控开发流程能力较好的同学升职为组长,负责保证一个需求的正常开发,他们会直接面对需求同学,直接沟通需求的开发要点,然后组长安排开发同学和测试同学跟进这个需求直到上线,也就是把需求同学以前的工作分配到开发组长,让他把控整个流程,这样就不会使得开发同学、测试同学、需求同学之间互相频繁沟通影响效率。这样子我们看看代码实现。

多了一个技术组长的类,负责跟进整个需求的开发测试过程。

/*** 技术组长*/
class Leader {private Developer developer = new Developer();private Tester tester = new Tester();public void processDemand(String name) {developer.develop(name);tester.test(name);}}
复制代码

需求同学就不用直接和开发同学、测试同学沟通了,就跟技术组长对接就好。

/*** 需求同学*/
class Demander2 {public Leader leader = new Leader();public void demand(String name) {System.out.println("提需求:" + name);leader.processDemand(name);}}
复制代码

测试代码。

public class FacadeTest {public static void main(String[] args) {Demander2 demander2 = new Demander2();demander2.demand("开发一个跟微信一样的系统");}}打印结果:
提需求:开发一个跟微信一样的系统
开发需求:开发一个跟微信一样的系统
测试需求:开发一个跟微信一样的系统
复制代码

这个就是我们的外观模式,我们的技术组长就是外观模式的象征,他专门对外提供接收需求服务,然后安排需求给开发同学和测试同学,保证完成。

总结

外观模式通过一个对外统一的接口,隐藏了内部的具体实现,使得外部系统可以更加简单的访问,也减少了外部系统对内部系统的依赖,从上面的例子讲,如果开发同学开发一半生病短时间无法来上班,交接给其他同学,由组长内部安排解决,需求同学并不需要知道。外观模式在微服务交互之间经常使用。

转载于:https://juejin.im/post/5cd2b841f265da034d2a2d0f

结构型模式:外观模式相关推荐

  1. Java设计模式之结构型:外观模式

    一.什么是外观模式: 外观模式通过对客户端提供一个统一的接口,用于访问子系统中的一群接口.使用外观模式有以下几点好处: (1)更加易用:使得子系统更加易用,客户端不再需要了解子系统内部的实现,也不需要 ...

  2. JavaScript设计模式(三):结构型设计模式-外观模式、适配器模式、代理模式、装饰者模式、桥接模式、组合模式、享元模式

    JavaScript设计模式 - 结构型设计模式 套餐服务-外观模式 外观模式(Facade) 水管弯弯-适配器模式 适配器模式(Adapter) 适配异类框架 参数适配 牛郎织女-代理模式 代理模式 ...

  3. Java设计模式之结构型:组合模式

    前言: 我们对于上面两幅图片肯定非常熟悉,这两幅图片我们都可以看做是一个文件结构,对于这样的结构我们称之为树形结构.在数据结构中我们知道可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可 ...

  4. Java设计模式之结构型:代理模式

    前言: 我们一般在租房子时会去找中介,为什么呢?因为你对该地区房屋的信息掌握的不够全面,希望找一个更熟悉的人去帮你做:再比如我们打官司需要请律师,因为律师在法律方面有专长,可以替我们进行操作,表达我们 ...

  5. Java设计模式之结构型:桥接模式

    一.什么是桥接模式: 桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯,桥接模式的作用就是为被分离的抽象部分和实现部分搭桥.在现实生活中一个物品在搭配不同的配件时会产生不同的动作和结果, ...

  6. 《设计模式详解》结构型模式 - 外观模式

    外观模式 5.5 外观模式 5.5.1 概述 5.5.2 结构 5.5.3 案例 5.5.4 使用场景 5.5.5 Tomcat 源码 完整的笔记目录:<设计模式详解>笔记目录,欢迎指点! ...

  7. 设计模式(18):结构型-享元模式(Flyweight)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  8. 结构型-享元模式-02-实例实现(围棋)

    结构型-享元模式-02-实例实现 1. 棋子抽象类(享元抽象类): 2. 白棋子(具体享元类): 3. 黑棋子(具体享元类): 4. 棋子坐标类(外部状态) 5. 享元工厂类 6. 客户端测试 7. ...

  9. 设计模式(装饰者模式外观模式代理模式)

    目录 装饰者模式 介绍 实现 外观模式 介绍 实现 代理模式 介绍 实现 装饰者模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设 ...

  10. php门面理解,php 门面模式(外观模式)

    header("content-type:text/html;charset=utf-8"); // ==================php 门面模式(外观模式) ====== ...

最新文章

  1. 每一个开发人员都应该懂的 UML 规范
  2. 十五、中文词向量训练二
  3. 应用指定显示到副屏_LED灯杆屏广泛应用逐渐成为智慧城市信息化的重要窗口
  4. 前端学习(2801):传递id
  5. python 去重 字典_python按照list中字典的某key去重的示例代码
  6. php 四级联动插件,JavaScript_jQuery实现的多选框多级联动插件,jQuery 实现的多选框联动插件 - phpStudy...
  7. keep怎么生成运动轨迹_空间新物种 !| 垂直运动路径与商业综合体的整合与植入...
  8. 000 初步使用Kotlin开发Android应用
  9. SQL Server 默认跟踪应用4 -- 检测日志文件自动增长
  10. word毕业论文导出高清pdf
  11. lisp 标注螺纹孔_螺纹的标注方法
  12. 屏幕录制专家linux版,录屏大师免费版下载-录屏大师全新下载V3.5.3-Linux公社
  13. 程序设计算法竞赛高级——练习1解题报告
  14. HTML5+CSS期末大作业:环保网站设计——环境保护(10页) 含设计报告 HTML+CSS+JavaScript 静态HTML环境保护网页制作下载 DIV+CSS环保网页设计代码
  15. 35、线程的让步与阻塞
  16. SAA 心理素质差差的
  17. 华为云05之网络虚拟化
  18. 教授专栏35 | 许彬:AR校园元宇宙
  19. 计算机专业对于女生来说怎么样,计算机专业好不好女生学计算机有前途吗
  20. 三端稳压芯片78xx/79xx的功耗和散热

热门文章

  1. 保护ASP.NET 应用免受 CSRF 攻击
  2. 从无头单链表中删除节点 结构之法 4
  3. POJ1741 Tree(树分治——点分治)题解
  4. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
  5. 小豆包的学习之旅:里程计运动模型
  6. argparse库 学习记录
  7. python登录系统简易框架
  8. 《转化:提升网站流量和转化率的技巧》迷你书
  9. 噩耗...............
  10. 简单工厂模式,抽象工厂模式,反射工厂模式的代码总结