北京喜提初雪,Edg喜夺冠军

随着冷空气的来袭,北京迎来了第一场雪。

随着英雄联盟S11比赛的结束,EDG拿到了期盼已久的冠军。

有人可能不看英雄联盟的比赛,包括我。

但是这无所谓。

我们看一下EDG的夺冠路程:

s4:八强

s5:八强

s6:八强

s7:十六强

s8:八强

s9:N强

s10:N强

s11: 冠军

或许这跟很多人的人生一样,刚开始在小学、初中成绩很不错。

但是到了高中人才多了之后自己成绩开始落后,随着大学的到来可能稍微努努力成绩就会排在前边。

但是一旦到了社会,你会发现你的地位(单指能力)会处在很多人之下。

所以这时候你会放弃吗?

EDG没有放弃,s9、s10他们什么都没有得到,但是他们依旧坚持。

经过不懈的努力他们终于在s11夺冠。

我们没有什么理由可以不努力。

好了,鸡血走一波之后我们继续今天的知识点学习。

今天我们来学一个设计模式:门面模式

这个模式很简单,但是我们要想一个故事来描述一下

一、当官不为民做主。不如回家卖红薯

举个例子(这是一个假设例子,请勿对号入座)你去补办身份证的时候,人家说你得先去A部门证明你是你,结果人家5点下班,你4点30去了,人家不帮你办理了,你第二天再去吧。

第二天早上9点就去了,结果人家是10点上班,然后人家10点全体开会,等到了中午,然后中午工作人员都去吃饭了,你也不敢去吃饭,怕别人插到你前边,于是你就啃着馒头在窗口前等到了下午,终于办了你是你的证明。

第三天你拿着A部门的证明去补办身份证,结果被告知你还得拿户口本。于是你连夜坐火车回老家找父母拿了户口本。

第四天你拿着A部门证明+户口本去补办身份证的时候被告知,农村户口需要本村证明。你刚坐火车从老家拿户口本回来,这时候心中是不是一万个*飞奔而过。你就问工作人员,为什么不早点儿给我说,工作人员说:你又没问我。我TMD…

于是你又连夜坐火车回老家开了一个证明。

第五天拿着A部门证明+户口本+户籍所在地证明来排队办理。

是这个样子的:

北京喜提初雪,Edg喜夺冠军

你就说烦不烦。

如果有这样一个部门多好,你进去之后只需要填写表格,然后等待,工作人员会帮你把所有的事情处理好,因为现在信息都联网了,不需要来回奔波,于是就成了这样。

北京喜提初雪,Edg喜夺冠军

这样是不是方便多了,对喽,这个综合服务部门就是我们所谓的门面模式Facade ,他负责帮你与后边的系统协调沟通。

二、朝阳区大妈

话说朝阳区住着很多个明星,这些明星之间爱恨情仇相互交织。你根本分不清楚谁是谁的媳妇儿,谁是谁的小三,谁是谁的情儿。

这天他们莫名的在小区门口撞见了,于是就开始了争吵。

画面是这个样子的:

北京喜提初雪,Edg喜夺冠军

就问你乱不乱,这其实还好,娱乐圈可比这个链长、大、刺激。

这时候我们伟大的朝阳区大妈就来了,大妈说了你们有事儿全找我,我来帮你们解决。

于是就成了这样:
北京喜提初雪,Edg喜夺冠军

大妈这个角色叫什么呢,叫调停者Mediator

我们项目中什么时候需要这个大妈呢,最常见的就是我们的消息中间件MQ

还有我们这几年比较流行的数据中台

三、写代码

你觉得我会写一写代码来展示吗? 你错了!

我理解门面模式是在整个架构设计上使用比较好,在单个功能上可能不是很能体现它的价值。

但是身为程序员我怎么能不写个代码来表示表示

我们分这么几个类:

部门A、老家证明、老家户口本、补卡部门

package facade;

/**
 * @author 木子的昼夜编程
 */
public class HometownCertificate {
    public void execute(){
        System.out.println("老家证明");
    }
}

package facade;

/**
 * @author 木子的昼夜编程
 */
public class HomeAccountBook {
    public void execute(){
        System.out.println("老家户口本");
    }
}

package facade;

/**
 * @author 木子的昼夜编程
 */
public class DeptA {
    public void execute(){
        System.out.println("证明你是你!");
    }
}

package facade;

/**
 * @author 木子的昼夜编程
 */
public class CardReplacementDepartment {
    public void execute(){
        System.out.println("补卡部门");
    }
}

补卡流程:

package facade;

/**
 * @author 木子的昼夜编程
 */
public class Test {
    public static void main(String[] args) {
        // 耗时一天
        HometownCertificate hometownCertificate = new HometownCertificate();
        // 耗时一天
        HomeAccountBook homeAccountBook = new HomeAccountBook();
        // 耗时一天
        DeptA deptA = new DeptA();
        // 耗时一天
        CardReplacementDepartment cardReplacementDepartment = new CardReplacementDepartment();
        hometownCertificate.execute();
        homeAccountBook.execute();
        deptA.execute();
        cardReplacementDepartment.execute();
    }
}

改良后的补卡流程:

package facade;

/**
 * @author 木子的昼夜编程
 */
public class MyFacade {
    public void execute(){
        // 耗时一天
        HometownCertificate hometownCertificate = new HometownCertificate();
        // 耗时一天
        HomeAccountBook homeAccountBook = new HomeAccountBook();
        // 耗时一天
        DeptA deptA = new DeptA();
        // 耗时一天
        CardReplacementDepartment cardReplacementDepartment = new CardReplacementDepartment();
        hometownCertificate.execute();
        homeAccountBook.execute();
        deptA.execute();
        cardReplacementDepartment.execute();
    }
}

来补卡:

package facade;

/**
 * @author 木子的昼夜编程
 */
public class Test {
    public static void main(String[] args) {
        // 俩小时搞定
        MyFacade myFacade = new MyFacade();
        myFacade.execute();
    }
}

好了,结束了,下次再见。

不要忘记曾经的梦想,为之努力!

上一篇:设计模式学习笔记--外观模式(详细笔记)


下一篇:10.外观模式