魔术桌
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • 更新日志
  • 新闻资讯
  • 数据资产
  • 网站导航
  • 订阅推荐
  • 商品推广
  • 日记
  • 摘录
  • 论文
  • 方案
  • 技术
  • 风格
  • 视觉
  • 原材料
  • 加工工艺
  • 元器件
  • 产品设备
  • 设计模式
  • 数据结构
  • 算法设计
  • 软件架构
  • 程序语言
  • 代码类库
  • 操作系统
  • 软件包
  • 健康
  • 环境
  • 社会
  • 道德
  • 法律
  • 经济
  • 政策
  • DesignPattern - 中介者模式

文章摘要: 中介者模式使用总结。

简介

简要说明

  • 中介者模式(Mediator Pattern)是一种行为型设计模式。
  • 通过引入一个中介者对象来协调多个对象之间的交互,使得对象之间不需要直接通信,而是通过中介者进行间接通信。

主要功能

  • 中介者模式通过中介者对象来封装对象之间的交互。
  • 它减少了对象之间的直接依赖关系,降低了系统的复杂性。
  • 它使得系统易于扩展和维护,因为新增对象只需要与中介者通信即可。

注意事项

  • 中介者对象可能会变得非常复杂,因为它需要处理所有对象之间的交互逻辑。
  • 如果不恰当使用中介者模式,可能会导致“上帝对象”(一个中介者对象处理过多逻辑),这违背了设计模式的原则。

适用场景

  • 当一组对象之间的交互操作很多且复杂时。
  • 当一个对象引用了多个对象,并直接与这些对象通信,导致难以复用时。
  • 当想要一个对象来统一控制多个对象的交互时。

Java 8

案例

import java.util.ArrayList;
import java.util.List;

// 中介者接口
interface Mediator {
    void registerColleague(Colleague colleague);
    void sendMessage(String message, Colleague originator);
}

// 同事接口
interface Colleague {
    void receiveMessage(String message);
    void sendMessage(String message);
}

// 具体的中介者
class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues = new ArrayList<>();

    @Override
    public void registerColleague(Colleague colleague) {
        colleagues.add(colleague);
        colleague.setMediator(this);
    }

    @Override
    public void sendMessage(String message, Colleague originator) {
        // 中介者转发消息给所有同事,除了消息的发送者
        for (Colleague colleague : colleagues) {
            if (colleague != originator) {
                colleague.receiveMessage(message);
            }
        }
    }
}

// 具体的同事类
class ConcreteColleague implements Colleague {
    private Mediator mediator;
    private String name;

    public ConcreteColleague(Mediator mediator, String name) {
        this.mediator = mediator;
        this.name = name;
        mediator.registerColleague(this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println(name + " received message: " + message);
    }

    @Override
    public void sendMessage(String message) {
        System.out.println(name + " sent message: " + message);
        // 通过中介者发送消息
        mediator.sendMessage(message, this);
    }

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }
}

// 客户端代码
public class MediatorPatternDemo {
    public static void main(String[] args) {
        // 创建中介者
        Mediator mediator = new ConcreteMediator();

        // 创建同事对象
        Colleague colleague1 = new ConcreteColleague(mediator, "Colleague 1");
        Colleague colleague2 = new ConcreteColleague(mediator, "Colleague 2");
        Colleague colleague3 = new ConcreteColleague(mediator, "Colleague 3");

        // 同事之间通过中介者发送消息
        colleague1.sendMessage("Hello, World!");
        colleague2.sendMessage("How are you?");
        colleague3.sendMessage("I'm fine, thank you!");
    }
}

注释

  • 在这个例子中,Mediator接口定义了注册同事和发送消息的方法。Colleague接口定义了接收和发送消息的方法。
  • ConcreteMediator类是具体的中介者,它维护了一个同事列表,并负责转发消息给所有注册的同事(除了消息的发送者)。
  • ConcreteColleague类是具体的同事类,它在构造时注册到中介者,并在发送消息时通过中介者进行转发。
  • 在客户端代码MediatorPatternDemo中,我们创建了中介者和三个同事对象。每个同事对象都可以通过中介者发送消息,而中介者则负责将消息转发给其他所有同事。这样,同事之间不需要直接相互引用,而是通过中介者进行通信。
更新时间: 2025/10/3 17:56