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

本文主要是介绍【设计模式】几需体验三欢钟,里造会干我一样理解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模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/189236

相关文章

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速