软件设计模式——中介者模式(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
原创粉丝点击