使用场景:

对象之间的交互很复杂时,定义一个调节者对象封装一系列对象之间的交互,使原有对象之间解耦,只与调节者对象交互。

结构模式:

抽象调节者接口Mediator,具体调节者实现类ConcreteMediator
抽象被调节者接口Colleague,具体被调节者实现类Buyer, Seller
每个被调节者拥有一个调节者对象

优点:

降低对象之间的耦合度;
将一对多关联转为一对一关联,提高系统灵活性,使系统易于扩展和维护

缺点:

当对象很多时,调节者的职责会很大,不好维护

举个房屋买卖的例子:

public abstract class Colleague {protected Mediator mediator;protected String name;public Colleague(String name) {this.name = name;}public String getName() {return this.name;}public void setMediator(Mediator mediator) {this.mediator = mediator;}public abstract void sendMsg(String to, String message);public abstract void receiveMsg(String from, String message);}

调节者接口:

public interface Mediator {void register(Colleague colleague);void convey(String from, String to, String message);
}

具体调节者:

public class ConcreteMediator implements Mediator{private List<Colleague> colleagueList = new ArrayList<>();@Overridepublic void register(Colleague colleague) {if (!colleagueList.contains(colleague)) {colleagueList.add(colleague);colleague.setMediator(this);}}@Overridepublic void convey(String from, String to, String message) {for (Colleague colleague : colleagueList) {if (to.equals(colleague.getName())) {colleague.receiveMsg(from, message);}}}
}

具体与调节者打交道的类:

public class Buyer extends Colleague{public Buyer(String name) {super(name);}@Overridepublic void sendMsg(String to, String message) {mediator.convey(name, to, message);}@Overridepublic void receiveMsg(String from, String message) {System.out.println(name + " receive " + message + " from " + from);}}
public class Seller extends Colleague{public Seller(String name) {super(name);}@Overridepublic void sendMsg(String to, String message) {mediator.convey(name, to, message);}@Overridepublic void receiveMsg(String from, String message) {System.out.println(name + " receive " + message + " from " + from);}}

测试代码:

public class Test {public static void main(String[] args) {Colleague buyer = new Buyer("buyer");Colleague seller = new Seller("seller");Mediator mediator = new ConcreteMediator();mediator.register(buyer);mediator.register(seller);buyer.sendMsg(seller.getName(), "I want to buy your house.");seller.sendMsg(buyer.getName(), "How much do you want to pay for it?");}
}

Java 设计模式之Mediator调节者模式相关推荐

  1. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  2. Java设计模式(1)工厂模式(Factory模式)

    工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...

  3. Java设计模式(8)组合模式(Composite模式)

    Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...

  4. Java设计模式(10)代理模式(Proxy模式)

    理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...

  5. 【Java设计模式】简单学外观模式——万能遥控器

    目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...

  6. 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡

    目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...

  7. Java设计模式之五大创建型模式

    Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...

  8. 【Java设计模式】简单学访问者模式——我的选择是,Yes

    目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...

  9. Java 设计模式之静态工厂方法模式

    设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...

最新文章

  1. SNF快速开发平台MVC-高级查询组件
  2. 中国北斗全球系统核心星座将于2019年年底部署完成
  3. 沃尔沃投资两家以色列科技创企 布局人工智能
  4. 跳出圈子易,再入围城难,重新学编程,且学且珍惜
  5. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.4节在Camera Raw中调整颜色...
  6. 医学科研如何快速掌握R语言?
  7. javascript中的异步编程
  8. Spring注解驱动开发
  9. HBae找不到协处理器导致RegionServer全部挂掉
  10. vuex使用模块的时候 获取state里的数据语法
  11. stm32f1的存储器与复位
  12. 一个ubuntu phper的自我修养(lamp)
  13. JVM学习-垃圾回收调优
  14. 文档在线编辑组件的发展回顾与开发集成选择问题
  15. VS2013中安装配置和使用Boost库
  16. vant实现三级联动
  17. matlab 12脉波变压器,12脉波整流电路MATLAB-Simulink仿真及谐波分析.pdf
  18. canvas的width和style.width的区别
  19. 基于知识图谱的问答系统入门之—NLPCC2016KBQA数据集
  20. 动态规划-最少硬币组合问题(Java)

热门文章

  1. java词法分析_Hive源码系列(七)编译模块之词法、语法解析 (中)
  2. 常见Java开发过程中遇到的问题及其解决办法
  3. strace 简单用法
  4. python fortran混合编程输入矩阵_如何将动态数组从Python传递到Fortran动态链接库
  5. python 强类型 弱类型_强类型、弱类型
  6. springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es
  7. 期权、RSU的区别与行权事宜
  8. Netapp日志出现auth.dc.trace.DCConnection.errorMsg:error报错
  9. Portworx副总裁Eric Han接受InfoQ采访,介绍超融合容器市场的现状
  10. [实战]Router configuration for TP ROOM