中介者模式--万能和事佬(行为模式04)
来源:互联网 发布:淘宝刷销量在哪里找人 编辑:程序博客网 时间:2024/06/01 10:33
什么是中介者模式
中介者模式包装了一系列对象相互作用的方式,使得这些对象不必明显作用,从而使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他对象之间的作用。保证这些作用可以独立变化。
中介者模式适用场景
对象之间交互操作过多且每个操作依赖彼此,防止修改一个对象行为影响全局。
中介者模式的角色
Mediator:抽象中介者角色
ConcreteNediator:具体中介者角色
Colleague:抽象同事类角色
ConcreteColleague:具体同时类 角色
中介者模式用例
电脑主板处理了很多事情,我们插上CD播放视频,cpu处理数据,显卡显示图像数据,声卡播放声音数据等
UML类图
抽象主板类AbstractMediator:
public abstract class AbstractMediator { abstract void changed(AbstractColleague c);}
具体主板类:
public class MainBoard extends AbstractMediator { private CD cd; private CPU cpu; private Display display; private Sound sound; @Override void changed(AbstractColleague c) { //cd读取数据 if(c == cd){ handleCD((CD)c); } //cpu处理数据 else if(c == cpu){ handleCPU((CPU)c); } } //cpu读取数据后与其他设备交互 private void handleCPU(CPU cpu){ sound.soundPlay(cpu.getDataSound()); display.display(cpu.getDataVideo()); } //cd读取后交互cpu private void handleCD(CD cd){ cpu.decodeData(cd.read()); } public void setCPU(CPU cpu){ this.cpu = cpu; } public void setDisplay(Display display){ this.display = display; } public void setUSB(CD cd){ this.cd = cd; } public void setSound(Sound sound){ this.sound = sound; }}
抽象同事类AbstractColleague:
public abstract class AbstractColleague { protected AbstractMediator mediator; public AbstractColleague(AbstractMediator mediator){ this.mediator = mediator; }}
具体同事类CPU:
public class CPU extends AbstractColleague { private String dataSound,dataVideo; public CPU(AbstractMediator mediator) { super(mediator); } public String getDataSound(){ return dataSound; } public String getDataVideo(){ return dataVideo; } public void decodeData(String data){ //划分数据为数组,第一个为视频,第二个为音频 String[] tmp = data.split(","); dataVideo = tmp[0]; dataSound = tmp[1]; //通知主板处理身份改变 mediator.changed(this); }}
具体同事类CD:
public class CD extends AbstractColleague { private String data; public CD(AbstractMediator mediator) { super(mediator); } public String read(){ return data; } public void load(){ data = "视频数据,音频数据"; mediator.changed(this); }}
具体同事类Display:
public class Display extends AbstractColleague { public Display(AbstractMediator mediator) { super(mediator); } public void display(String data){ System.out.println("画面显示+"+data); }}
具体同事类Sound:
public class Sound extends AbstractColleague { public Sound(AbstractMediator mediator) { super(mediator); } public void soundPlay(String data){ System.out.println("声音来源+"+data); }}
主类测试:
public class Test { public static void main(String[] args) { //构造主板 MainBoard board = new MainBoard(); //构造零件 CPU cpu = new CPU(board); Display display = new Display(board); CD usb = new CD(board); Sound sound = new Sound(board); //各个零件安装到主板 board.setUSB(usb); board.setDisplay(display); board.setCPU(cpu); board.setSound(sound); //插入usb播放数据 usb.load(); }}
测试结果:
声音来源+音频数据画面显示+视频数据
中介者模式总结
中介者模式就是用来协调多个对象之间的交互的,如果没有主板其他零件相互依赖,关系太复杂。中介模式的优点就是使得类之间的耦合度更小,使原本关系网状错杂的对象,变得结构清晰。中心就是中介者。
0 0
- 中介者模式--万能和事佬(行为模式04)
- 中介者模式(行为模式)
- 行为模式-中介者模式
- 行为模式-中介者模式
- 中介者模式 - 行为模式
- 行为模式 - 中介者(Mediator)
- 行为模式: Mediator(中介者)
- 中介者模式(行为型)
- 行为型-中介者模式(Mediator)
- 中介者模式(行为型)
- 中介者模式(行为类)
- 设计模式-行为-中介者
- 中介者模式(Mediator)(对象行为型模式)
- 设计模式笔记(17)---中介者模式(行为型)
- 对象行为模式——中介者模式(Mediator)
- 行为型模式-----中介者模式(Mediator)
- java设计模式(行为型)之中介者模式
- 设计模式--中介者模式Mediator(行为型)
- AIX上的date命令和循环语句与linux上的不同
- 字符编码 ASCII,Unicode和UTF-8的关系
- struct结构体在32位系统和64位系统的存储空间的不同
- 大鱼吃小鱼
- Debian更改默认jdk版本
- 中介者模式--万能和事佬(行为模式04)
- SVAC
- 复习java面向对象(封装)
- Raspberry Pi 树莓派入门
- 浅谈视频监控行业编解码技术的发展与应用
- Android DataBinding(数据绑定)详解(一)
- 5-spring源码3.2.18解读+spring技术内幕(关于BeanDefinition的定位)
- Linux版本的 sticky note
- Caffe中卷积的实现