Java 设计模式之Mediator调节者模式
使用场景:
对象之间的交互很复杂时,定义一个调节者对象封装一系列对象之间的交互,使原有对象之间解耦,只与调节者对象交互。
结构模式:
抽象调节者接口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调节者模式相关推荐
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(8)组合模式(Composite模式)
Composite定义:将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Compo ...
- Java设计模式(10)代理模式(Proxy模式)
理解并使用设计模式,能够培养我们良好的面向对象编程习惯,同时在实际应用中,可以如鱼得水,享受游刃有余的乐趣. Proxy是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,P ...
- 【Java设计模式】简单学外观模式——万能遥控器
目录 说明 目标 实现方式 注意事项 其他链接 说明 结构型模式之一,其他还有适配器模式.桥接模式.组合模式.装饰模式.享元模式.代理模式 外观模式(Facade Pattern)通过定义一个一致的接 ...
- 【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡
目录 说明 目标 实现方式 应用场景 其他链接 说明 结构型模式之一,其他还有适配器模式.装饰模式.组合模式.外观模式.享元模式.代理模式 目标 用抽象关联取代了多层继承,将类之间的静态继承关系转换为 ...
- Java设计模式之五大创建型模式
Java设计模式之五大创建型模式 设计模式(23种) 单例模式(Singleton Pattern) 参考链接 概念 使用场景 实现思路 实现方式 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线 ...
- 【Java设计模式】简单学访问者模式——我的选择是,Yes
目录 说明 实现方式 优点 缺点 应用场景 其他链接 说明 行为型模式之一,其他还有命令模式.模板方法模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式(Interpreter模式).状 ...
- Java 设计模式之静态工厂方法模式
设计模式系列 创建型设计模式 Java 设计模式之单例模式 Java 设计模式之静态工厂方法模式 Java 设计模式之工厂方法模式 Java 设计模式之抽象工厂模式 Java 设计模式之Builder ...
最新文章
- SNF快速开发平台MVC-高级查询组件
- 中国北斗全球系统核心星座将于2019年年底部署完成
- 沃尔沃投资两家以色列科技创企 布局人工智能
- 跳出圈子易,再入围城难,重新学编程,且学且珍惜
- 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第2课2.4节在Camera Raw中调整颜色...
- 医学科研如何快速掌握R语言?
- javascript中的异步编程
- Spring注解驱动开发
- HBae找不到协处理器导致RegionServer全部挂掉
- vuex使用模块的时候 获取state里的数据语法
- stm32f1的存储器与复位
- 一个ubuntu phper的自我修养(lamp)
- JVM学习-垃圾回收调优
- 文档在线编辑组件的发展回顾与开发集成选择问题
- VS2013中安装配置和使用Boost库
- vant实现三级联动
- matlab 12脉波变压器,12脉波整流电路MATLAB-Simulink仿真及谐波分析.pdf
- canvas的width和style.width的区别
- 基于知识图谱的问答系统入门之—NLPCC2016KBQA数据集
- 动态规划-最少硬币组合问题(Java)
热门文章
- java词法分析_Hive源码系列(七)编译模块之词法、语法解析 (中)
- 常见Java开发过程中遇到的问题及其解决办法
- strace 简单用法
- python fortran混合编程输入矩阵_如何将动态数组从Python传递到Fortran动态链接库
- python 强类型 弱类型_强类型、弱类型
- springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es
- 期权、RSU的区别与行权事宜
- Netapp日志出现auth.dc.trace.DCConnection.errorMsg:error报错
- Portworx副总裁Eric Han接受InfoQ采访,介绍超融合容器市场的现状
- [实战]Router configuration for TP ROOM