设计模式行为型——中介者模式

目录

什么是中介者模式

中介者模式的实现

中介者模式角色

中介者模式类图

中介者模式代码实现

中介者模式的特点

优点

缺点

使用场景

注意事项

实际应用


什么是中介者模式

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

中介者模式又叫调停者模式,是一种对象行为型模式。

中介者模式的实现

中介者模式角色

  1. 抽象中介者角色(Mediator):抽象中介者角色定义统一的接口,以及一个或者多个事件方法,用于各同事角色之间的通信。
  2. 具体中介者角色(ConcreteMediator):实现了抽象中介者所声明的事件方法,协调各同事类之间的行为,持有所有同事类对象的引用。
  3. 抽象同事角色(Colleague):定义了抽象同事类,持有抽象中介者对象的引用。
  4. 具体同事角色(ConcreteColleague):继承抽象同事类,实现自己业务,通过中介者跟其他同事类进行通信,都需要认识中介者。

中介者模式类图

中介者模式代码实现

抽象中介者角色

java 复制代码
package com.common.demo.pattern.mediator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体中介角色 具体中介者
 * @date 2023/08/04 09:27:57
 */
public class ConcreteMediator extends Mediator{

    @Override
    public void operation(Colleague colleague)
    {
        if(colleague instanceof ConcreteColleagueA) {
            colleagues.get(0).update();
        }else if(colleague instanceof ConcreteColleagueB) {
            colleagues.get(1).update();
        }
    }
}

具体中介者角色

java 复制代码
    package com.common.demo.pattern.mediator;

    /**
     * @author Evan Walker 昂焱数据: https://www.ayshuju.com
     * @version 1.0
     * @desc 具体中介角色 具体中介者
     * @date 2023/08/04 09:27:57
     */
    public class ConcreteMediator extends Mediator{

        @Override
        public void operation(Colleague colleague)
        {
            if(colleague instanceof ConcreteColleagueA) {
                colleagues.get(0).update();
            }else if(colleague instanceof ConcreteColleagueB) {
                colleagues.get(1).update();
            }
        }
    }

抽象同事角色

java 复制代码
package com.common.demo.pattern.mediator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 抽象同事角色 抽象同事类
 * @date 2023/08/04 09:21:50
 */
public abstract class Colleague {
    /**
     * 抽象中介者引用
     */
    protected Mediator mediator;

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

    /**
     * 数据更新方法
     */
    public abstract void update();

    /**
     * 数据更改方法
     */
    public abstract void changed();
}

具体同事角色

java 复制代码
package com.common.demo.pattern.mediator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体同事角色 具体同事小A
 * @date 2023/08/04 09:24:46
 */
public class ConcreteColleagueA extends Colleague{

    public ConcreteColleagueA(Mediator mediator)
    {
        super(mediator);
    }
    @Override
    public void update() {
        System.out.println("更新同事小A");
    }

    @Override
    public void changed() {
        System.out.println("同事小A数据更改");
        mediator.operation(this);
    }
}
package com.common.demo.pattern.mediator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体同事角色 具体同事小B
 * @date 2023/08/04 09:24:46
 */
public class ConcreteColleagueB extends Colleague{

    public ConcreteColleagueB(Mediator mediator)
    {
        super(mediator);
    }
    @Override
    public void update() {
        System.out.println("更新同事小B");
    }

    @Override
    public void changed() {
        System.out.println("同事小B数据更改");
        mediator.operation(this);
    }
}

测试代码

java 复制代码
package com.common.demo.pattern.mediator;

/**
 * @author Evan Walker 昂焱数据: https://www.ayshuju.com
 * @version 1.0
 * @desc 具体中介角色 具体中介者
 * @date 2023/08/04 09:27:57
 */
public class ConcreteMediator extends Mediator{

    @Override
    public void operation(Colleague colleague)
    {
        if(colleague instanceof ConcreteColleagueA) {
            colleagues.get(0).update();
        }else if(colleague instanceof ConcreteColleagueB) {
            colleagues.get(1).update();
        }
    }
}

测试截图

中介者模式的特点

优点

  1. 解耦对象之间的交互:中介者模式将对象间的交互逻辑封装到中介者对象中,使得各个对象之间的关系变得松耦合,减少了对象之间的直接依赖。
  2. 集中控制交互逻辑:中介者模式通过集中控制对象间的交互逻辑,使得代码更加清晰可维护,易于扩展和修改。
  3. 简化对象间的通信:中介者模式将对象间的通信封装到中介者对象中,对象只需要关注自身的业务逻辑,无需了解其它对象的具体实现细节。

缺点

  1. 中介者对象过于复杂:随着系统的复杂性增加,中介者对象可能会变得庞大复杂,维护和理解起来相对困难。
  2. 增加了系统的单一点故障:中介者对象负责协调对象之间的交互,一旦中介者对象出现问题,可能会影响系统的稳定性。

使用场景

  1. 多个对象之间存在复杂的交互关系:当对象之间存在复杂的交互逻辑,并且彼此之间的依赖关系较高时,可以考虑使用中介者模式。
  2. 需要集中控制对象间交互逻辑的情况:当需要集中管理和控制多个对象的交互逻辑时,可以使用中介者模式简化系统的设计。

注意事项

  1. 中介者模式需要注意中介者对象的设计和组织方式,以及与其他对象的交互关系,避免中介者对象过于庞大和复杂。
  2. 不要滥用中介者模式,只有在对象间的交互逻辑较为复杂、耦合度较高时才考虑使用中介者模式。

实际应用

  1. 聊天室:聊天室中的用户可以通过中介者对象发送消息和接收消息,中介者负责将消息传递给其他用户。
  2. MVC框架:在MVC框架中,控制器作为中介者对象,接收用户的请求并协调模型和视图之间的交互。
  3. 航空管制系统:航空管制系统中的空中交通管制中心可以看作是中介者,负责协调各个飞机的航行和地面设施之间的交互。

更多消息资讯,请访问昂焱数据https://www.ayshuju.com

相关推荐
瞎姬霸爱.10 小时前
设计模式-七个基本原则之一-里氏替换原则
java·设计模式·里氏替换原则
monkey_meng10 小时前
【Rust设计模式之建造者模式】
后端·设计模式·rust·建造者模式
BIGSHU092317 小时前
游戏中的设计模式及杂项
游戏·设计模式
L_cl19 小时前
Python学习从0到1 day27 Python 高阶技巧 ③ 设计模式 — 单例模式
学习·单例模式·设计模式
CV猿码人20 小时前
设计模式-命令模式
设计模式·命令模式
编程、小哥哥1 天前
设计模式之工厂方法模式
java·设计模式·工厂方法模式
WaaTong1 天前
《重学Java设计模式》之 工厂方法模式
java·设计模式·工厂方法模式
努力编程的阿伟1 天前
软件工程中的创建型设计模式:工厂方法模式与抽象工厂模式
设计模式·软件工程·抽象工厂模式
孤邑2 天前
【设计模式】观察者模式
c++·笔记·学习·观察者模式·设计模式
hello world smile2 天前
Flutter 中的那些设计模式的写法(持续更新)
android·flutter·设计模式·移动开发