本文主要是介绍【设计模式】几需体验三欢钟,里造会干我一样理解Facade和Mediator模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Facade 门面模式
我要办个转户口
现有
Client
一枚,需要在城里落户,要转户口,现在有关部门要求Client
准备一系列的材料。我们精简一下部门,假设只需要跑
材料部门
、核验盖章部门
和制证发证部门
三个部门就行了。现在需要
Client
先去材料部门
领取材料,然后填写完成后到核验部门盖章
,最后拿着盖着的材料去制证部门
领证,这样一套按照顺序走下来,业务才能算完成。
代码模拟
材料部门
/*** 材料部门,给办证者提供必要的材料* @author 行百里者*/
public class StuffDept {public void makeStuff() {//处理业务逻辑System.out.println("制作相关材料,并发给Client填写");}
}
盖章部门
/*** 检查核验部门,核验通过才给盖章* @author 行百里者*/
public class CheckDept {public void checkStuff() {//处理业务逻辑System.out.println("核查材料的准确性,核查通过才给盖章");}
}
制证部门
/*** 发证部门* @author 行百里者*/
public class IssueDept {public void issueCert() {//处理业务逻辑System.out.println("发证部门检验材料是否盖章,然后制证发证");}
}
需要办证的Client
处理场景:
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
打交道就可以了。
/*** “中国式办证”所需的“门面”部门,负责统一处理各部门的事情,* 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
调起
public class Client {public static void main(String[] args) {NetApp facade = new NetApp();facade.doItJustOnce();}
}
对于Client
来说,是不是就清爽了!
这不就是再封装了一层吗?没错,这就是门面模式
,解决了Client
向各个部门内部调用,并且按照指定的顺序调用这一繁琐的问题。
Mediator 调停者模式
有的地方把它叫做
中介者模式
,名字不重要!!!
张三的烦恼
张三的老婆发现他最近有点异常,怀疑张三和他前女友藕断丝连,于是张老婆去找张三他妈评理,但是俩人很快吵起来了,此时小姑子出现了,又是一顿吵,是互相吵的那种。
张三恼了,和其他三人也吵起来了。
他很想结束现状,但是他已无能为力,甚至自己也陷入其中,要是
居委会大妈
在就好了!!!
居委会大妈
的职责就是协调他们内部的事情,有什么事直接跟我说,保证把你们的事情都解决!!!
居委会大妈
就是调停者,中介者。
画图模拟现场
加入了一个中介者作为四个模块的交流核心,每个模块之间不再相互交流,要交流就通过中介者居委会大妈
进行。每个模块只负责自己的业务逻辑,不属于自己的则丢给中介者来处理,简化了各模块之间的耦合关系。
消息中间件
卧槽,中介处理各个模块的需求,而且各个模块之间不需要通信,消息中间件不就是这种模式吗?
对!MQ就可以理解为Mediator模式
。
调停者模式的优缺点
- 优点
中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,减少了依赖,当然同时也降低了类间的耦合。
- 缺点
中介者模式的缺点就是中介者会膨胀得很大,而且逻辑复杂,,中介者的逻辑就越复杂。
好了,你已经会门面模式
和调停者模式
了。下一个!!!
这篇关于【设计模式】几需体验三欢钟,里造会干我一样理解Facade和Mediator模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!