结构型模式:外观模式
文章首发: 结构型模式:外观模式
七大结构型模式之五:外观模式。
简介
姓名 :外观模式
英文名 :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("开发一个跟微信一样的系统"); } } 打印结果: 提需求:开发一个跟微信一样的系统 开发需求:开发一个跟微信一样的系统 测试需求:开发一个跟微信一样的系统
这个就是我们的外观模式,我们的技术组长就是外观模式的象征,他专门对外提供接收需求服务,然后安排需求给开发同学和测试同学,保证完成。
总结
外观模式通过一个对外统一的接口,隐藏了内部的具体实现,使得外部系统可以更加简单的访问,也减少了外部系统对内部系统的依赖,从上面的例子讲,如果开发同学开发一半生病短时间无法来上班,交接给其他同学,由组长内部安排解决,需求同学并不需要知道。外观模式在微服务交互之间经常使用。
推荐阅读
公众号后台回复『大礼包』获取 Java、Python、IOS 等教程 加个人微信备注『教程』获取架构师、机器学习等教程
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
leetcode-5 最长回文子串-画蛇添足的马拉车算法
leetcode-5 最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" 分析 初步分析 首先能想到的就是暴力解法,遍历每一个字符,寻找以该字符为中心或者以该字符和下一个字符为中心的最大的回文子串,时间复杂度O(n2),具体见下面代码。 第一个问题:暴力解法有哪些地方是可以优化的? 其实要回答这个问题并不简单,有些题目的可优化点是容易看到的,而有些并非轻易看到,比如本题,要回答这个问题还是要从题目给出的线索中寻找。题目说回文串,我们就要充分利用到这个回文串的特性,回文串的特性比较简单(为了简单起见下文先考虑bab这种长度为奇数的回文子串): 假设对称中心为id,x、y是关于id对称的,即x+y=2*id,那么arr[x]=arr[y] 除此之外无其他本质特性了。其他特性就是再根据一些场景和上述本质特性推导出来的特性,这种无非就是利用对称对等关系,利用多组对称对等关系可以得出一些其他结...
- 下一篇
百亿级企业级 RPC 框架开源了!
今天给大家介绍给一款性能卓越的 RPC 开源框架,其作者就是我推荐每个 Java 程序员都应该看的《Java 生态核心知识点整理》的原作者张玉龙。 说实话我第一次看到这个资料的时候,就感觉作者是一位真正的技术爱好者,后来通过朋友介绍终于认识了他。交谈之中得知他在美团工作,最初和朋友一起整理这份资料的初衷是为了面试,估计每天需要面试太多的应聘者,这份资料成了助手。强烈建议没有看这份资料的同学学习下,作为 Java 生态知识体系构建也是一份不错的资源。 后来得知业余时间他在研发一款开源的 RPC 开源框架,并且经过测试可支持百亿级别的调用,并且于近期终于完成推出 1.0 版本。这款开源软件名字叫做 Koalas,源代码地址:koalas-rpc,下面对这款开源软件做详细介绍,内容来源于 Koalas 。 Koalas 介绍 企业生产级百亿日 PV 高可用可拓展的 RPC 框架。理论上并发数量接近服务器带宽,客户端采用 thrift 协议,服务端支持 netty 和 thrift 的 TThreadedSelectorServer 半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题