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

应用
消息中间件
文章作者: 褚成志
相关推荐
2026-04-09
访问者Visitor
在结构不变的情况下动态改变内部元素的动作 适合用在接口结构基本固定不变的 实现案例123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116package com.deltaqin.designPattern.d04_visitor;// 根据不同的访问者访问的不同商品,给不同的价格// 计算的规则定义在访问者上面,不同访问者对从商品获得的相同的信息实现自己的逻辑// 同一个被访问者传递给不同访问者的消息是一样的。public class Computer { ComputerPart cpu = new CPU(); ComputerPar...
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
备忘录模式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
策略设计模式Strategy
Comparable 是被比较对象和比较策略没有解耦 Comparator 是被比较对象和比较策略解耦了,在真正要比较的时候才会定义比较策略。这就是策略模式****(实现比较策略和被比较对象的解耦) 相比于策略模式,非策略模式不符合开闭原则,比如Comparable想要修改比较方法,必须修改实现类的内部。而使用了策略模式的Comparator就不需要 详细版业务逻辑可能有很多方式都可以实现某个具体的功能。例如,按照购买次数对一个用户购买的全部商品进行排序,从而粗略地得知该用户复购率最高的商品,我们可以使用多种排序算法来实现这个功能,例如,归并排序、插入排序、选择排序等。 之前都是if else,新增的时候直接追加 在策略模式中,我们会将每个算法单独封装成不同的算法实现类(这些算法实现类都实现了相同的接口),每个算法实现类就可以被认为是一种策略实现,我们只需选择不同的策略实现来解决业务问题即可,这样每种算法相对独立,算法内的变化边界也就明确了,新增或减少算法实现也不会影响其他算法。 StrategyUser 是算法的调用方,维护了一个 Strategy 对象的引用,用来选择...
2026-04-09
责任链模式ChainofResponsibility
简单实现–实现链式调用以及调用链中断1234567891011121314151617interface Filter { boolean doFilter(Msg m);}class HTMLFilter implements Filter { @Override public boolean doFilter(Msg m) { String r = m.getMsg(); r = r.replace('<', '['); r = r.replace('>', ']'); m.setMsg(r); return true; }}// ... 其他具体的过滤器实现类 调用链也实现Filter接口,是为了可以两个链子连起来。也就是说把后面的链子当做过滤器的**List的最后一个元素。利用了多态,都实现了doFilter,但是具体的过滤器是...
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 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!
