中介者、调停者Intermediary模式
发表于|更新于|设计模式
|浏览量:
调节互相直接的关系
该模式让你将对象间的所有关系抽取成为一个单独的类, 以使对于特定组件的修改工作独立于其他组件。
- 抽象中介者接口声明了一个能让组件将各种事件通知给中介者的方法。中介者可对这些事件做出响应并将执行工作传递给其他组件。
- 具体中介者类可解开各组件之间相互交叉的连接关系并将其转移到中介者中。
- 创建所有组件对象并将当前中介者传递给其构造函数以建立连接。
- 当组件中有事件发生时,它会通知中介者。中介者接收到通知后可自行处理,也可将请求传递给另一个组件。
- 抽象组件会使用中介者接口与中介者进行交互。因此只需将它们与不同的中介者连接起来,你就能在其他情境中使用这些组件了。
- 具体组件之间无法进行交流。它们只有一个交流渠道,那就是向中介者发送通知。

应用
消息中间件
文章作者: 褚成志
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 褚成志的分享站!
相关推荐
2026-04-09
访问者Visitor
在结构不变的情况下动态改变内部元素的动作 适合用在接口结构基本固定不变的 实现案例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116package com.deltaqin.designPattern.d04_visitor;// 根据不同的访问者访问的不同商品,给不同的价格// 计算的规则定义在访问者上面,不同访问者对从商品获得的相同的信息实现自己的逻辑// 同一个被访问者传递给不同访问者的消息是一样的。public class Computer { ComputerPart cpu = new CPU(); ComputerPar...
2026-04-09
备忘录模式memento
序列化反序列使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制 在Java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化。 案例Gender类,是一个枚举类型,表示性别 123public enum Gender { MALE, FEMALE } 每个枚举类型都会默认继承类java.lang.Enum,而该类实现了Serializable接口,所以枚举类型对象都是默认可以被序列化的。 123456789101112131415161718192021222324252627282930313233343536public class Person implements Serializable...
2026-04-09
观察者模式Observer
观察者接口:Observer接口、Listener接口、Hook、Callback 具体观察者:实现Observer接口 事件类 :不仅仅包含时间,事件,还包含事件源。这样观察者拿到事件知道是谁发的才可以做有区别的处理 事件源对象:被观察者Object, 事件源对象,新建事件对象。事件源自己会维护很多监听器。可以调用监听器接口的方法, **事件对象 **穿过 Observer的链条 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485package com.deltaqin.designPattern.d09_observer;import java.util.ArrayList;import java.util.List;/** * @author deltaqin * @date 2021/3/27 12...
2026-04-09
命令模式
解耦:通过命令对象解耦,而不是直接操作想要操作的对象。 这样的好处就是在修改被操作的对象的方法的时候,只需修改中间的调用者这一个地方,而不是把之前的所有的调用者都修改一遍 增加命令的时候只需增加命令类即可,命令类就是对编辑器操作的包装,基础功能早就在上面写好了。命令类就是起到了解耦,增加命令(组合命令)方便 将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 命令模式适合用在需要将请求调用者和请求的执行者进行解耦的场景。 需要请求的撤销操作时也是可以使用命令模式的。 1.优点:命令模式可以将请求的调用者和请求的执行者进行解耦。(调用者可能是键盘鼠标一个按钮,他们都要和receiver对线) 2.缺点:命令模式因为需要将命令封装成对象,所以每有一个命令就需要创建一个对象,这样造成命令对象这些小类特别多。 编辑器设计 有些命令会改变编辑器的状态 (例如剪切和粘贴),很多操作对应的是同一个命令,所以直接封装为对象,调用对象就好,而不是直接操作Editor,不然的话Editor有个...
2026-04-09
迭代器模式Iterator
定义迭代器的接口,以及对应的hasNext以及next方法 注意定义的时候使用泛型,不然接口方法的返回值只能是Object,实际使用的时候还需要强制转换 在被迭代的接口里面定义获取迭代器的方法 注意使用泛型 在需要被迭代的对象里面实现一个具体迭代器,专属于这个对象的迭代器以及对应的迭代方法,每一个对象的迭代遍历的方法应该是不一样 注意实现被迭代接口的时候标注的泛型依旧是被迭代对象 public class MyArrayList<E> implements MyCollection<E> 实现(注意适应泛型)定义迭代器的抽象方法1234567891011package com.deltaqin.designPattern.d06_iterator;/** * @author deltaqin * @date 2021/3/27 10:38 上午 */public interface MyIterator<T> { boolean hasNext(); T next();} 定义集合的抽象方法12...
2026-04-09
状态模式State
根据状态决定动作 不同状态下的同一动作有不同的实现,就是一个简单的多态。简单面向接口编程 应用:TCP 不同的状态下open close ack的方法的实现是不一样的,扩展方法是不方便的,方法不扩展可以使用状态模式 线程状态案例 线程是上下文 线程状态是State Running,Blocking等等是具体的状态 状态接口1234public abstract class ThreadState_ { abstract void move(Action input); abstract void run();} 具体状态123456789101112131415161718public class NewState extends ThreadState_ { private Thread_ t; public NewState(Thread_ t) { this.t = t; } @Override void move(Action input) { ...
公告
👋 你好,我是褚成志,一名专注于云原生与后端架构的工程师。
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!