结构型模式:外观模式

七大结构型模式之五:外观模式。

简介

姓名 :外观模式

英文名 :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("开发一个跟微信一样的系统");
    }

}

打印结果:
提需求:开发一个跟微信一样的系统
开发需求:开发一个跟微信一样的系统
测试需求:开发一个跟微信一样的系统

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

总结

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

(0)

相关推荐

  • 每日糊图:20160327

    每日糊图 No. 15880 人都会有需求,更会有被需求的需求. People all have demand, and there will be demand for demand. 欢迎关注 每 ...

  • 传统的以产品为中心的产品开发的过程要经历...

    传统的以产品为中心的产品开发的过程要经历创意的产生--创意的筛选--产品的分析--研发测试--产品研发--市场测试--商业化的过程,这个过程是新产品开发的一个成熟.完善的过程,更加适用于专业性.技术性 ...

  • chrome扩展程序开发/chrome运行本地JS脚本

    Chrome浏览器插件–Talend API Tester–Api测试插件推荐 Talend API Tester–Api测试插件推荐Chrome浏览器插件–Talend API Tester–Api ...

  • 提升软件交付效能——初探“按需发布”

    在精益思想的指导下,团队寻找开发流程中的阻碍点,并从各个层面做出调整策略.在业务侧,分析哪些需求可以做到按需发布,哪些需求无法做到,设定适合团队的按需发布标准,并调整迭代工作量.在开发侧,考虑数据的兼 ...

  • 无废话设计模式(10)结构型模式--外观模式

    0-前言 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定了一个高层接口    这一接口使得这一子系统更加容易使用: 1-实现 1-1.简单UML图: 1-2.代码实现 //1.子系统A ...

  • 每天学习一个设计模式(二):结构型之桥梁模式

    一.基本概念 桥梁模式(Bridge)是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是"将抽象化(Abstraction) ...

  • 结构型设计模式 - 组合模式详解

    基本介绍 1.组合模式(Composite Pattern)又叫部分整体模式,他创建了对象组的树形结构,将对象组合成树状结构以表示「整体 - 部分」的层次关系. 2.组合模式使得用户对单个对象和组合对 ...

  • 设计模式-结构型-装饰者模式

    装饰者模式(wrapper): 允许向一个现有的对象添加新的功能,同时又不改变其结构.装饰器模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展对象的新功能.使用对象的关联关系代替继承关系,更加 ...

  • 设计模式-结构型模式总结

    结构型模式主要处理类或对象的组合,关注于如何将现有类或对象组织在一起形成更大的结构. 适配器模式 将一个类的接口转换成客户希望的另外一个接口,使原本不能一起工作的类可以一起工作. 适配器模式属于补偿机 ...

  • 结构型模式之组合模式

    在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等. 在软件开发中也 ...

  • 结构型模式之享元模式

    在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈.例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网 ...

  • 结构型模式之代理模式

    在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象. 定义与特点 由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不 ...

  • 无废话设计模式(11)结构型模式--代理模式

    0-前言 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问. 1-实现 1-1.简单UML图: 1-2.代码实现 //1.抽象父类 abstract class Actor { public ...