结构型模式:外观模式

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

花

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

简介

姓名 :外观模式架构

英文名 :Facade Pattern机器学习

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

我的介绍
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);
    }

}

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

/**
 * 需求同窗
 */
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

相关文章
相关标签/搜索