软件设计模式——中介者模式(Mediator)

转自:http://blog.csdn.net/wangyanguiyiyang

定义与结构

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。GOF 给调停者模式下的定义是:用一个中介类对象来封装一系列的对象交互。调停者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

简单点来说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“调停”对象,使得两头的对象分别和“调停”对象引用或者依赖。
当然并不是所有的对象都需要加入“调停”对象。如果对象之间的关系原本一目了然,调停对象的加入便是“画蛇添足”。

来看下调停者模式的组成部分吧。
1) 抽象调停者(Mediator)角色:抽象调停者角色定义统一的接口用于各同事角色之间的通信。
2)具体调停者(Concrete Mediator)角色:具体调停者角色通过协调各同事角色实现协作行为。为此它要知道并引用各个同事角色。
3)同事(Colleague)角色:每一个同事角色都知道对应的具体调停者角色,而且与其他的同事角色通信的时候,一定要通过调停者角色协作。
这里写图片描述

中介者模式的实现

//抽象调停者角色--Mediator
public interface IMdiator {
    public void fight();
    public void talk();
    public void registerA(ColleagueA a);
    public void registerB(ColleagueB b);
}
//具体调停者角色--ConcreteMediator
public 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;
    }
}
//抽象同事角色--Colleague
public abstract class  Colleague {
    IMdiator mediator;
    public abstract void doSomething();
}
//具体同事角色--ConcreteColleagueA
public class ColleagueA extends Colleague{
    public ColleagueA(IMdiator mediator) {
        this.mediator = mediator;
        this.mediator.registerA(this);
    }
    @Override
    public void doSomething() {
        this.mediator.talk();
    }
}
//具体同事角色--ConcreteColleagueB
public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值