软件设计模式——中介者模式(Mediator)
来源:互联网 发布:美国大非农数据预测 编辑:程序博客网 时间:2024/06/11 01:19
转自:http://blog.csdn.net/wangyanguiyiyang
定义与结构
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。GOF 给调停者模式下的定义是:用一个中介类对象来封装一系列的对象交互。调停者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“调停”对象,使得两头的对象分别和“调停”对象引用或者依赖。
当然并不是所有的对象都需要加入“调停”对象。如果对象之间的关系原本一目了然,调停对象的加入便是“画蛇添足”。
来看下调停者模式的组成部分吧。
1) 抽象调停者(Mediator)角色:抽象调停者角色定义统一的接口用于各同事角色之间的通信。
2)具体调停者(Concrete Mediator)角色:具体调停者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。
3)同事(Colleague)角色:每一个同事角色都知道对应的具体调停者角色,而且与其他的同事角色通信的时候,一定要通过调停者角色协作。
中介者模式的实现
//抽象调停者角色--Mediatorpublic interface IMdiator { public void fight(); public void talk(); public void registerA(ColleagueA a); public void registerB(ColleagueB b);}
//具体调停者角色--ConcreteMediatorpublic class ConcreteMediator implements IMdiator{ ColleagueA talk; ColleagueB fight; @Override public void fight() { System.out.println("Mediator is fighting"); } @Override public void talk() { System.out.println("Mediator is talking"); } @Override public void registerA(ColleagueA a) { talk = a; } @Override public void registerB(ColleagueB b) { fight = b; }}
//抽象同事角色--Colleaguepublic abstract class Colleague { IMdiator mediator; public abstract void doSomething();}
//具体同事角色--ConcreteColleagueApublic class ColleagueA extends Colleague{ public ColleagueA(IMdiator mediator) { this.mediator = mediator; this.mediator.registerA(this); } @Override public void doSomething() { this.mediator.talk(); }}
//具体同事角色--ConcreteColleagueBpublic class ColleagueB extends Colleague{ public ColleagueB(IMdiator mediator) { this.mediator = mediator; this.mediator.registerB(this); } @Override public void doSomething() { this.mediator.fight(); }}
//测试类public class MediatorTest { public static void main(String[] args) { IMdiator mediator = new ConcreteMediator(); ColleagueA talkColleague = new ColleagueA(mediator); ColleagueB fightColleague = new ColleagueB(mediator); talkColleague.doSomething(); fightColleague.doSomething(); }}
运算结果:
Mediator is talking
Mediator is fighting
0 0
- 软件设计模式——中介者模式(Mediator)
- 设计模式—Mediator中介者模式
- 对象行为模式——中介者模式(Mediator)
- JAVA设计模式——中介者模式(Mediator)
- JS——Mediator(中介者)模式
- 设计模式学习—Mediator(中介者)
- 中介者模式(Mediator)
- 中介者模式(Mediator)
- 中介者模式(Mediator)
- Mediator(中介者模式)
- 中介者模式(Mediator)
- 中介者模式(Mediator)
- Mediator(中介者)模式
- 中介者模式(Mediator)
- 中介者(Mediator)模式
- 中介者模式(Mediator)
- 中介者模式(Mediator)
- 中介者模式(Mediator)
- 菜鸟入门_Python_机器学习(1)_线性可分的双月实验
- bzoj 4446: [Scoi2015]小凸玩密室
- toj 1026/2189 Network 求割点数量
- chkconfig删除某项服务
- 牛客“一站通offer” 笔试题总结
- 软件设计模式——中介者模式(Mediator)
- Java中的数组基础(一)
- ACM刷题之HDU————hide handkerchief
- 轻量级java ee企业应用实战第4版 源码下载
- Java 序列化Serializable详解
- 这次栽倒在sscanf函数上------ 看看错误的语句:int nRet = sscanf("xxx=yyy", "%s=%s", szKey, szValue);
- hibernate性能优化
- oracle应该注意的细节
- leetcode——89——Gray Code