深入理解Java设计模式之中介者模式

目录
  • 一、什么是中介者模式
  • 二、中介者模式的结构
  • 三、中介者模式的优缺点
  • 四、中介者模式的使用场景
  • 五、中介者模式与发布/订阅模式的异同
  • 六、中介者模式的实现
    • 结果
  • 总结

一、什么是中介者模式

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者作为一种行为设计模式,它公开一个统一的接口,系统的不同对象或组件可以通过该接口进行通信。增加一个中介者对象后,所有的相关对象通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介者对象即可。

二、中介者模式的结构

Mediator:中介者接口。在里面定义各个同事之间交互需要的方法,可以是公共的通讯方法,比如changed方法,大家都用,也可以是小范围的交互方法。

ConcreteMediator:具体中介者实现对象。它需要了解并维护各个同事对象,并负责具体的协调各同事对象的交互关系。

Colleague:同事类的定义,通常实现成为抽象类,主要负责约束同事对象的类型,并实现一些具体同事类之间的公共功能,比如:每个具体同事类都应该知道中介者对象,也就是具体同事类都会持有中介者对象,就可以定义到这个类里面。

ConcreteColleague:具体的同事类,实现自己的业务,在需要与其它同事通讯的时候,就与持有的中介者通信,中介者会负责与其它的同事交互。

三、中介者模式的优缺点

优点: 减少各个Colleague之间的耦合,使得可以独立地改变和复用各个Colleague类和Mediator

缺点:中介者模式的缺点是显而易见的,因为这个“中介“承担了较多的责任,所以一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。

四、中介者模式的使用场景

1. 一组定义良好的对象,现在要进行复杂的通信。

2. 定制一个分布在多个类中的行为,而又不想生成太多的子类。

可以看出,中介对象主要是用来封装行为的,行为的参与者就是那些对象,但是通过中介者,这些对象不用相互知道。

五、中介者模式与发布/订阅模式的异同

1. 中介者模式与业务相关,订阅/发布模式与业务无关。

2. 两个模式都有集中调度效果,对象之间不直接参与通信。

六、中介者模式的实现

安理会做中介

联合国机构类--Mediator类

//联合国机构
abstract class UnitedNations
{
    //声明
    public abstract void Declare(string message, Country colleague);
}

国家类--Colleague类

//国家
abstract class Country
{
    protected UnitedNations mediator;
    public Country(UnitedNations mediator)
    {
        this.mediator = mediator;
    }
}

美国类--ConcreteColleague类

//美国
class USA : Country
{
    public USA(UnitedNations mediator) : base(mediator)
    {
    }
    //声明
    public void Declare(string message)
    {
        mediator.Declare(message, this);
    }
    //获取消息
    public void GetMessage(string message)
    {
        Console.WriteLine("美国获得对方消息:" + message);
    }
}

伊拉克类--ConcreteColleague类

//伊拉克
class Iraq : Country
{
    public Iraq(UnitedNations mediator) : base(mediator)
    {
    }
    //声明
    public void Declare(string message)
    {
        mediator.Declare(message, this);
    }
    //获取消息
    public void GetMessage(string message)
    {
        Console.WriteLine("伊拉克获得对方消息:" + message);
    }
}

联合国安理会--ConcreteMediator类

//联合国安全理事会
class UnitedNationsSecurity : UnitedNations
{
    private USA colleague1;
    private Iraq colleague2;
    //美国
    public USA Colleague1 { set { colleague1 = value; } }
    //伊拉克
    public Iraq Colleague2 { set { colleague2 = value; } }
    public override void Declare(string message, Country colleague)
    {
        if (colleague == colleague1)
        {
            colleague2.GetMessage(message);
        }
        else
        {
            colleague1.GetMessage(message);
        }
    }
}

客户端代码

class Program
{
    //客户端代码
    static void Main(string[] args)
    {
        UnitedNationsSecurity UNSC = new UnitedNationsSecurity();
        USA c1 = new USA(UNSC);
        Iraq c2 = new Iraq(UNSC);
        UNSC.Colleague1 = c1;
        UNSC.Colleague2 = c2;
        c1.Declare("不准研发核武器,否则开战");
        c2.Declare("没研发,开战就开战");
        Console.Read();
    }
}

结果

伊拉克获得对方消息:不准研发核武器,否则开战
美国获得对方消息:没研发,开战就开战

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 设计模式之中介者模式_动力节点Java学院整理

    定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类:如果一个对象会

  • 详解Java设计模式编程中的中介者模式

    定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构        中介者模式又称为调停者模式,从类图中看,共分为3部分:  抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过消息影响其他同时类. 同事类

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

    中介者模式 面向对象设计鼓励将行为分布到各个对象中, 这种分布可能会导致对象间有许多连接. 在最坏的情况下, 每一个对象都需要知道其他所有对象. 虽然将一个系统分割成许多对象可增强可复用性, 但是对象间相互连接的激增又会降低其可复用性. 大量的连接关系使得一个对象不可能在没有其他对象的协助下工作(系统表现为一个不可分割的整体), 此时再对系统行为进行任何较大改动就十分困难. 因为行为被分布在许多对象中, 结果是不得不定义很多子类以定制系统的行为. 由此我们引入了中介者对象Mediator: 通过

  • 23种设计模式(20)java中介者模式

    23种设计模式第二十篇:java中介者模式 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 类型:行为类模式 类图: 中介者模式的结构 中介者模式又称为调停者模式,从类图中看,共分为3部分: 抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信.一般包括一个或几个抽象的事件方法,并由子类去实现. 中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法.从一个同事类接收消息,然后通过

  • Java设计模式之中介者模式(Mediator Pattern)简介

    Java设计模式的中介者模式是行为模式之一.定义一个中介对象来封装系列对象之间的交互.中介者使各个对象不需要显式地相互引用,从而使其耦合性松散,并且可以独立地改变他们之间的交互. 如下图所示: 生产者.消费者.代理商之间的中介模式实例: public abstract class PersonColleague { protected Mediator mediator; public Mediator getMediator() { return mediator; } public void

  • Java设计模式之java中介者模式详解

    目录 引言 介绍 角色 数据库同步数据案例 不使用中介者模式的数据同步方案,各数据源维护各自的同步作业 其实这样已经实现了我们的需求,但是存在一些问题 中介者模式来重构,将数据同步的功能迁移到中介者中,由中介者来管理数据同步作业 小结 主要优点 中介者模式的主要缺点 适用场景 具体应用 Java Timer 中的中介者模式 参考文章 引言 一般来说,同事类之间的关系是比较复杂的,多个同事类之间互相关联时,他们之间的关系会呈现为复杂的网状结构,这是一种过度耦合的架构,即不利于类的复用,也不稳定.例

  • 深入理解Java设计模式之中介者模式

    目录 一.什么是中介者模式 二.中介者模式的结构 三.中介者模式的优缺点 四.中介者模式的使用场景 五.中介者模式与发布/订阅模式的异同 六.中介者模式的实现 结果 总结 一.什么是中介者模式 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者作为一种行为设计模式,它公开一个统一的接口,系统的不同对象或组件可以通过该接口进行通信.增加一个中介者对象后,所有的相关对象通过中介者对象来通信,而不是互相引用,所以当一个

  • 快速理解Java设计模式中的组合模式

    组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 通用类图如下: 组合模式的包含角色: ● Component 抽象构件角色 定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性. ● Leaf 叶子构件 叶子对象,其下再也没有其他的分支,也就是遍历的最

  • 深入理解Java设计模式之职责链模式

    目录 一.什么是职责链模式 二.职责链模式的结构 四.职责链模式的使用场景 五.职责链模式的实现 一.什么是职责链模式 二.职责链模式的结构 四.职责链模式的使用场景 五.职责链模式的实现 六.总结 六.总结 一.什么是职责链模式 客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象.这样就实现了请求者和接受者之间的解耦,并且在客户端可以实现动态的组合职责链.使编程更有灵活性. 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系.

  • 深入理解Java设计模式之抽象工厂模式

    目录 一.什么是抽象工厂模式 二.抽象工厂模式的应用场景 三.抽象工厂模式和工厂方法模式对比 四.抽象工厂模式的优缺点 五.抽象工厂模式的实现 六.总结 一.什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式. 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象. 根据里氏替换原则,任

  • 深入理解Java设计模式之享元模式

    目录 一.引言 二.什么是享元模式 三.享元模式的结构 四.享元模式和单例模式的异同 五.享元模式的优缺点 六.享元模式的使用场景 七.享元模式的实现 八.总结 一.引言 大家都知道单例模式,通过一个全局变量来避免重复创建对象而产生的消耗,若系统存在大量的相似对象时,又该如何处理?参照单例模式,可通过对象池缓存可共享的对象,避免创建多对象,尽可能减少内存的使用,提升性能,防止内存溢出. 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就

  • 深入理解Java设计模式之简单工厂模式

    目录 一.什么是简单工厂模式 二.简单工厂模式的结构 三.简单工厂模式的应用场景 四.简单工厂模式和工厂方法模式区别 五.简单工厂模式和策略模式的异同 六.简单工厂模式的优缺点 七.简单工厂模式的实现 八.总结 一.什么是简单工厂模式 简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例. 其实就是将一个具体类的实例化交给一个静态工厂方法来执

  • Android编程设计模式之中介者模式详解

    本文实例讲述了Android编程设计模式之中介者模式.分享给大家供大家参考,具体如下: 一.介绍 中介者模式(Mediator Pattern)也称为调解者模式或调停者模式,Mediator本身就有调停者和调解者的意思. 在日常生活中调停者或调解者这个角色我们见得比较多的是"和事老",也就是说调解两个有争端的人的角色,举个不恰当的例子,比如爸妈吵架,孩子或者双方父母则会出面劝架或阻止争吵,这里孩子或双方父母则是充当的是调解者的模式. 而对于中介呢?大家平时听得最多的莫过于房产中介了,在

  • Java设计模式之Builder建造者模式

    一.场景描述 建造者模式同工厂模式.抽象工厂模式一样,用于创建继承类对象. 工厂模式:Java设计模式之工厂模式 抽象工厂模式:Java设计模式之抽象工厂模式 所不同的是,工厂模式下,各子类实现接口,通过工厂类创建子类对象:而建造者模式下,各子类拥有其建造者类,通过它创建不同的父类对象,最终实现多态,实际上子类.父类在代码中是不存在的. 以仪器数据采集工具为例,工厂模式下,定义接口"仪器数据采集工具",定义子类"PDF文件数据采集工具"和"Excel文件数

随机推荐