随着冷空气的来袭,北京迎来了第一场雪。
随着英雄联盟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部门证明+户口本+户籍所在地证明来排队办理。
是这个样子的:
你就说烦不烦。
如果有这样一个部门多好,你进去之后只需要填写表格,然后等待,工作人员会帮你把所有的事情处理好,因为现在信息都联网了,不需要来回奔波,于是就成了这样。
这样是不是方便多了,对喽,这个综合服务部门就是我们所谓的门面模式Facade ,他负责帮你与后边的系统协调沟通。
二、朝阳区大妈
话说朝阳区住着很多个明星,这些明星之间爱恨情仇相互交织。你根本分不清楚谁是谁的媳妇儿,谁是谁的小三,谁是谁的情儿。
这天他们莫名的在小区门口撞见了,于是就开始了争吵。
画面是这个样子的:
就问你乱不乱,这其实还好,娱乐圈可比这个链长、大、刺激。
这时候我们伟大的朝阳区大妈就来了,大妈说了你们有事儿全找我,我来帮你们解决。
于是就成了这样:
大妈这个角色叫什么呢,叫调停者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();
}
}
好了,结束了,下次再见。
不要忘记曾经的梦想,为之努力!