文章首发:
结构型模式:外观模式

花

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

简介

姓名 :外观模式

英文名 :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 等教程
加个人微信备注『教程』获取架构师、机器学习等教程

LieBrother