Mediator Pattern-中介者模式
2017-10-08 22:39
483 查看
中介者模式(行为型模式): 用一个中介者对象封装一系列的对象交互, 中介者使个对象不需要显示进行相互作用, 从而降低各类之间的耦合,可以独立的改变他们的交互
中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
中介者模式的组成
抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消息影响其他同时类。
同事类:如果一个对象会影响其他的对象,同时也会被其他对象影响,那么这两个对象称为同事类。在类图中,同事类只有一个,这其实是现实的省略,在实际应用中,同事类一般由多个组成,他们之间相互影响,相互依赖。同事类越多,关系越复杂。并且,同事类也可以表现为继承了同一个抽象类的一组实现组成。在中介者模式中,同事类之间必须通过中介者才能进行消息传递。
Demo演示
下面以主板为例子,演示中介者模式的使用,使用主板协调音频和屏幕信息,比如实现一个这样的功能,在播放视频的时候打开音频,在播放音乐的时候打开视频UML图
抽象同事类
// 同事类角色 abstract class Colleague { BoardMediator mediator; boolean isPlaying; Colleague(BoardMediator mediator) { this.mediator = mediator; } public boolean isPlaying() { return isPlaying; } }
同事类角色(音视频管理类)
// 音频模块 class AudioManager extends Colleague { public AudioManager(BoardMediator mediator) { super(mediator); } // 播放音乐 public void playSound() { System.out.println("AudioManager: 开始播放音乐"); isPlaying = true; mediator.change(this); } }
// 图像模块 class WindowManager extends Colleague { public WindowManager(BoardMediator mediator) { super(mediator); } public void playVideo() { System.out.println("windowManager: 开始播放视频"); isPlaying = true; mediator.change(this); } }
中介者模块: 主板
// 中介者角色 // 主板协调者,用于协调电脑各组件 class BoardMediator { private AudioManager audio; private WindowManager widow; public void setAudio(AudioManager audio) { this.audio = audio; } public void setWidow(WindowManager widow) { this.widow = widow; } // 中介者进行协调工作 public void change(Colleague colleague) { if (colleague instanceof WindowManager) { // 播放视频时,打开音乐播放器 if (!audio.isPlaying()) { audio.playSound(); } } if (colleague instanceof AudioManager) { // 播放音乐时,打开屏幕 if (!widow.isPlaying()) { widow.playVideo(); } } } }
调用示例
public class Main { public static void main(String[] args) { // 创建中介者 BoardMediator mediator = new BoardMediator(); // 创建同事类 AudioManager audio = new AudioManager(mediator); WindowManager window = new WindowManager(mediator); // 注册同事对象 mediator.setAudio(audio); mediator.setWidow(window); // window开始播放视频 window.playVideo(); // 结果 /*windowManager: 开始播放视频 AudioManager: 开始播放音乐*/ } }
相关文章推荐
- 二十四种设计模式:中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)。
- 4.7 《硬啃设计模式》 第24章 麻烦的多角关系 - 中介者模式(Mediator Pattern)简介
- 4.7 《硬啃设计模式》 第24章 麻烦的多角关系 - 中介者模式(Mediator Pattern)简介
- 第17章 中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)
- 中介者模式(Mediator pattern)
- Mediator Design Pattern 中介者模式
- 设计模式系列5-----C++实现中介者模式(Mediator Pattern)
- 调停者模式(Mediator Pattern,对象行为型模式,中介者模式)
- 23种设计模式-10.中介者模式(Mediator Pattern)
- 23种设计模式(17)_行为型_中介者模式(Mediator Pattern)
- 23种设计模式--中介者模式-Mediator Pattern
- 中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern)
- Net设计模式实例之中介者模式(Mediator Pattern)(1) 推荐
- 设计模式(行为型)之中介者模式(Mediator Pattern)
- 设计模式拾荒之中介者模式(Mediator Pattern): 避免对象间错综复杂的相互引用
- 设计模式第十一课 中介者模式 Mediator Pattern