设计模式 - 中介者模式

原创 2016年08月30日 21:46:07

概述

       中介者模式(Mediator Pattern)也称为调解者模式或者调停者模式。

定义

       中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而是它们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对对象的行为和协作抽象化。把对象在小尺度的行为上与其他对象的相互作用分开处理。

使用场景

       当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及修改很多其他对象的行为,可采用中介者模式,来解决耦合问题。该模式将对象之间的多对多的关系变成一对多的关系,中介者对象将系统从网状结构变成调停者为中的星形结构,达到降低的复杂性,提高可扩展性。

UML类图

这里写图片描述
角色介绍:

Mediator:抽象中介者角色,定义了同事对象到对象的接口,一般以抽象类的方式实现。

ConcreteMediator:具体中介者角色,继承于抽象中介者,实现了父类定义的方法,它从具体的同事对象接收消息,像具体同事对象发出命令。

Colleague:抽象同时类角色,定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。

ConcreteColleagueA/B:具体同事类角色,继承于抽象同时类,每个具体同事类都知道本身在小范围内的行为,而不知道它在大范围内的目的。

示例代码

       创建抽象中介者

public abstract class Mediator {

    /**
     * 同事对象改变时通知中介者的方法
     * 在同事对象改变时由中介通知其他的同事对象
     *
     * @param colleague 改变的同事对象
     */
    abstract void changed(Colleague colleague);
}

       创建具体中介者

public class ConcreteMediator extends Mediator {

    Colleague mColleague;
    ColleagueA mColleagueA;
    ColleagueB mColleagueB;

    @Override
    void changed(Colleague colleague) {
        if (colleague instanceof ColleagueA) {
            handleColleagueA();
        } else if (colleague instanceof ColleagueB){
            handleColleagueB();
        }
    }

    private void handleColleagueA() {
        mColleagueA.toast("我是操作者A");
        mColleagueB.toast("我是同事,A告诉我干嘛");
    }
    private void handleColleagueB() {
        mColleagueA.toast("我是同事,B告诉我干嘛");
        mColleagueB.toast("我是操作者B");
    }

    public void setmColleagueA(ColleagueA mColleagueA) {
        this.mColleagueA = mColleagueA;
    }

    public void setmColleagueB(ColleagueB mColleagueB) {
        this.mColleagueB = mColleagueB;
    }
}

       创建抽象同事

public abstract class Colleague {
    Mediator mMediator;

    public Colleague(Mediator mediator) {
        this.mMediator = mediator;
    }

    abstract void attend();
}

       创建具体同事A和B

public class ColleagueA extends Colleague {

    public ColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    void attend() {
        mMediator.changed(this);
    }

    public void toast(String content) {
        System.out.println(content);
    }
}

public class ColleagueB extends Colleague {
    public ColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    void attend() {
        mMediator.changed(this);
    }

    public void toast(String content) {
        System.out.println(content);
    }
}

       测试类

public class Test {
    public static void main(String[] args) {
        ConcreteMediator mMediator = new ConcreteMediator();
        ColleagueA mColleagueA = new ColleagueA(mMediator);
        ColleagueB mCOColleagueB = new ColleagueB(mMediator);

        mMediator.setmColleagueA(mColleagueA);
        mMediator.setmColleagueB(mCOColleagueB);

        mColleagueA.attend();

        System.out.println("\n----------------------------\n");

        mCOColleagueB.attend();
    }
}

       Log打印

我是操作者A
我是同事,A告诉我干嘛

----------------------------

我是同事,B告诉我干嘛
我是操作者B
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式 - 中介者模式

  • 2017-07-06 18:50
  • 407KB
  • 下载

设计模式——中介者

MEDIATOR 中介者  参考《设计模式——可复用面向对象软件的基础》和《研磨设计模式》的读书笔记。 1、 意图 用一个中介者对象来封装一系列的对象交互。中介者使其各对象不需要显式地相互引用,...
  • Feb13
  • Feb13
  • 2012-08-25 15:04
  • 808

《设计模式 ● 中介者》之业务场景

/************************************************************************************************** ...

Mediator(中介者)设计模式

一、概念 用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。 二、模式结构图
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)