MediatorPattern中介者模式

中介者模式

1.定义

使用一个中介对象封装一系列的对象交互,中介者使用对象不需要显式的相互作用,从而实降现低耦合度,且可以独立改变被封装的一些列对象之间的交互。

中介者模式也叫做调停者模式:对象之间的依赖就像战争,很混乱,加入一个中心,所有对象都和中心交流,接受中心的调停处理。

中介者模式通常有4个角色

AbstractColleague抽象同事类:抽象中介者角色。指定一个中介者用于与其它同事之间的通信。

public abstract class AbstractColleague {

    protected AbstractMediator mediator;

    public AbstractColleague(AbstractMediator mediator) {
        this.mediator = mediator;
    }
}

AbstractMediator抽象类:抽象中介者角色。定义统一的接口,用于各同事角色之间的通信。

public abstract class AbstractMediator {

    protected ColleagueOne colleagueOne;

    protected ColleagueTwo colleagueTwo;

    public ColleagueOne getColleagueOne() {
        return colleagueOne;
    }

    public ColleagueTwo getColleagueTwo() {
        return colleagueTwo;
    }

    public void setColleagueOne(ColleagueOne colleagueOne) {
        this.colleagueOne = colleagueOne;
    }

    public void setColleagueTwo(ColleagueTwo colleagueTwo) {
        this.colleagueTwo = colleagueTwo;
    }

    public abstract void executeOne();

    public abstract void executeTwo();
}

Colleague类具体同事类:同事角色。每一个同事角色都知道中介者角色,每一个同事角色的行为分为两种:一种是自身的行为,用来改变自身的状态或处理自身的业务逻辑,并且与其它同事和中介者没有任何依赖关系,叫做自发行为。另一种是必须依赖中介者才能完成的行为,叫做依赖方法。

public class ColleagueOne extends AbstractColleague {

    public ColleagueOne(AbstractMediator mediator) {
        super(mediator);
    }

    /**
     * 自发行为
     */
    public void selfMethodOne() {
        // 处理自己的业务逻辑
        System.out.println("ColleagueOne的自有方法");
    }

    /**
     * 依赖行为
     */
    public void depMethodOne() {
        // 处理自己的业务逻辑
        System.out.println("ColleagueOne的依赖方法");

        // 委托中介者处理
        super.mediator.executeOne();
    }
}

public class ColleagueTwo extends AbstractColleague {

    public ColleagueTwo(AbstractMediator mediator) {
        super(mediator);
    }

    /**
     * 自发行为
     */
    public void selfMethodTwo() {
        // 处理自己的业务逻辑
        System.out.println("ColleagueTwo的自有方法");
    }

    /**
     * 依赖行为
     */
    public void depMethodTwo() {
        // 处理自己的业务逻辑
        System.out.println("ColleagueTwo的依赖方法");

        // 委托中介者处理
        super.mediator.executeTwo();
    }
}

Mediator类:通用中介者角色。协调各同事角色实现协作行为,必须依赖各个同事角色。

public class Mediator extends AbstractMediator {

    @Override
    public void executeOne() {
        super.colleagueOne.selfMethodOne();
        super.colleagueTwo.selfMethodTwo();
    }

    @Override
    public void executeTwo() {
        super.colleagueTwo.selfMethodTwo();
        super.colleagueOne.selfMethodOne();
    }
}

场景类

public class Client {

    public static void main(String[] args) {
        // 定义中介者
        AbstractMediator mediator = new Mediator();

        // 定义同事类
        ColleagueOne colleagueOne = new ColleagueOne(mediator);
        ColleagueTwo colleagueTwo = new ColleagueTwo(mediator);

        // 中介者注入同事类
        mediator.setColleagueOne(colleagueOne);
        mediator.setColleagueTwo(colleagueTwo);

        colleagueOne.depMethodOne();

        colleagueTwo.depMethodTwo();
    }
}

2.应用

2.1 优点

  • 减少类之间的依赖,降低类之间的耦合度

2.2 缺点

  • 中介者会过于膨胀,且逻辑复杂

2.3 使用场景

在面向对象的编程中,对象及对象之间必然会存在依赖关系,存在即合理,不一定有依赖关系则使用中介者模式。中介者模式适用于多个对象之间紧密耦合的情况,类图中出现了蜘蛛网状结构。使用中介者模式有利于将蜘蛛网状结构梳理为星型结构。

  • 调度中心
  • 媒体网关
  • 中介服务
(0)

相关推荐

  • 图解Java设计模式之中介者模式

    智能家庭项目 传统方案解决智能家庭管理问题 中介者模式基本介绍 中介者模式的原理类图 中介者模式 - 智能家庭的操作流程 中介者模式的注意事项和细节 智能家庭项目 1)智能家庭包括各种设备,闹钟.咖啡 ...

  • Java设计模式-中介者模式

    https://www.shengchulai.com/blog-CiTs5E8tUf.htm 前言 小时候钟爱战争片,<地道战>.<鸡毛信>.<铁道游击队>一系列 ...

  • PHP设计模式之中介者模式

    PHP设计模式之中介者模式 上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介.大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈.既然需要长期的租房,那么因为工作或 ...

  • 设计模式------中介者模式

    中介者模式: 定义一个对象来封装一系列对象的交互. 中介者的四个角色: 1.Mediator(抽象中介者) 2.ConcreteMediator(具体中介者) 3.Colleague(抽象同事类) 4 ...

  • 通俗易懂设计模式解析——中介者模式

    前言 今天我们一起看看中介者模式,怎么去理解这个模式呢?说起来也简单.好理解.生活中我们租房经常都是通过中介来实现的.一般租房要么是房东直租要么是中介.那么今天要讲的中介者模式和租房的这个中介是否有关 ...

  • 行为型模式之中介者模式

    在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",它要求每个对象都必须知道它需要交互的对象. 如果把这种"网状结构"改为& ...

  • 最新票据中介套利模式揭秘

    陈亚楠 |2018-12-18 21:2832108 2018年下半年以来,市场利率整体下行,部分以实体公司为载体的票据中介,利用银行体系信贷额度宽松.存贴价格倒挂时机,业务不断创新,在"收 ...

  • [PHP小课堂]PHP设计模式之中介者模式

    [PHP小课堂]PHP设计模式之中介者模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 空白直播间 |中介加盟模式的开创者——21世纪不动产

    part1. 近两年,中国经纪行业最显著的变化之一,是加盟模式在全国各地兴起与发展. 对于加盟这一现象级的商业模式,我们该如何理解它的本质? 国内外不同特许品牌之间差异化的竞争策略与价值优势分别是什么 ...

  • 无废话设计模式(17)行为型模式--中介者模式

    0-前言 中介者模式定义(Mediator): 用一个中介对象来封装一系列的对象交互. 中介者对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. 1-实现 1-1.简单UM ...

  • 中介者模式

    一.中介者模式介绍 1.定义与类型 定义一个封装一组对象如何交互的对象 通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互 类型:行为型 2.适用场景 系统中对象之间存在复杂的引用关系 ...