前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式】几需体验三欢钟,里造会干我一样理解Facade和Mediator模式

【设计模式】几需体验三欢钟,里造会干我一样理解Facade和Mediator模式

作者头像
行百里er
发布2020-12-02 14:34:40
3240
发布2020-12-02 14:34:40
举报
文章被收录于专栏:JavaJourney

Facade 门面模式

我要办个转户口

❝现有Client一枚,需要在城里落户,要转户口,现在有关部门要求Client准备一系列的材料。 我们精简一下部门,假设只需要跑材料部门核验盖章部门制证发证部门三个部门就行了。 现在需要Client先去材料部门领取材料,然后填写完成后到核验部门盖章,最后拿着盖着的材料去制证部门领证,这样一套按照顺序走下来,业务才能算完成。 ❞

代码模拟

材料部门

代码语言:javascript
复制
/**
 * 材料部门,给办证者提供必要的材料
 * @author 行百里者
 */
public class StuffDept {
    public void makeStuff() {
        //处理业务逻辑
        System.out.println("制作相关材料,并发给Client填写");
    }
}

盖章部门

代码语言:javascript
复制
/**
 * 检查核验部门,核验通过才给盖章
 * @author 行百里者
 */
public class CheckDept {
    public void checkStuff() {
        //处理业务逻辑
        System.out.println("核查材料的准确性,核查通过才给盖章");
    }
}

制证部门

代码语言:javascript
复制
/**
 * 发证部门
 * @author 行百里者
 */
public class IssueDept {
    public void issueCert() {
        //处理业务逻辑
        System.out.println("发证部门检验材料是否盖章,然后制证发证");
    }
}

需要办证的Client处理场景:

代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        //一定要按照这个顺序去办证,否则拿不到证
        StuffDept sd = new StuffDept();
        sd.makeStuff();
        CheckDept cd = new CheckDept();
        cd.checkStuff();
        IssueDept id = new IssueDept();
        id.issueCert();
    }
}

其实,现实生活中,我们可能远不止跑这三个部门,如果Client来回穿梭于N个部门间,办事效率是不是很垃圾了!

用门面模式解决这一疑难杂症

❝好在现在很多地方提供了网上通道办理一些业务,Client只需要跑一次就可以了,Client只需要和网上通道-NetApp打交道就可以了。 ❞

代码语言:javascript
复制
/**
 * “中国式办证”所需的“门面”部门,负责统一处理各部门的事情,
 * Client只需要调“门面”的doItJustOnce方法即可
 * @author 行百里者
 */
public class NetApp {
    private StuffDept stuffDept = new StuffDept();
    private CheckDept checkDept = new CheckDept();
    private IssueDept issueDept = new IssueDept();
    
    public void doItJustOnce() {
        stuffDept.makeStuff();
        checkDept.checkStuff();
        issueDept.issueCert();
    }
}

Client调起

代码语言:javascript
复制
public class Client {
    public static void main(String[] args) {
        NetApp facade = new NetApp();
        facade.doItJustOnce();
    }
}

对于Client来说,是不是就清爽了!

这不就是再封装了一层吗?没错,这就是门面模式,解决了Client向各个部门内部调用,并且按照指定的顺序调用这一繁琐的问题。

Mediator 调停者模式

❝有的地方把它叫做中介者模式,名字不重要!!! ❞

张三的烦恼

❝张三的老婆发现他最近有点异常,怀疑张三和他前女友藕断丝连,于是张老婆去找张三他妈评理,但是俩人很快吵起来了,此时小姑子出现了,又是一顿吵,是互相吵的那种。 张三恼了,和其他三人也吵起来了。 他很想结束现状,但是他已无能为力,甚至自己也陷入其中,要是居委会大妈在就好了!!! 居委会大妈的职责就是协调他们内部的事情,有什么事直接跟我说,保证把你们的事情都解决!!! 居委会大妈就是调停者,中介者。 ❞

画图模拟现场

加入了一个中介者作为四个模块的交流核心,每个模块之间不再相互交流,要交流就通过中介者居委会大妈进行。每个模块只负责自己的业务逻辑,不属于自己的则丢给中介者来处理,简化了各模块之间的耦合关系。

消息中间件

卧槽,中介处理各个模块的需求,而且各个模块之间不需要通信,消息中间件不就是这种模式吗?

对!MQ就可以理解为Mediator模式

调停者模式的优缺点

  • 优点

❝中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,减少了依赖,当然同时也降低了类间的耦合。 ❞

  • 缺点

❝中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,,中介者的逻辑就越复杂。 ❞

好了,你已经会门面模式调停者模式了。下一个!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 行百里er 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Facade 门面模式
    • 我要办个转户口
      • 代码模拟
        • 用门面模式解决这一疑难杂症
        • Mediator 调停者模式
          • 张三的烦恼
            • 画图模拟现场
              • 消息中间件
                • 调停者模式的优缺点
                相关产品与服务
                消息队列 TDMQ
                消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档