Java23种设计模式-行为型模式之中介者模式

中介者模式(Mediator Pattern),也称为仲裁者模式,定义了一个中介对象,用以封装一系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使耦合度降低,而且可以独立地改变它们之间的交互。

具体组成
中介者(Mediator):定义了同事对象如何与其进行通信的接口。
具体中介者(ConcreteMediator):实现了中介者接口,通过具体同事类的对象来改进各同事之间的交互。
同事类(Colleague):定义了中介者模式中各个对象的接口,这些对象不直接交互,而是通过中介者对象来进行。
具体同事类(ConcreteColleague):每一个具体同事类都实现了在同事类中定义的接口,并且它们都持有一个中介者对象的引用。

优点

减少了对象之间的依赖,每个对象不需要知道其他对象的实现细节。

通过中介者对象可以方便地进行整个系统的协调。
缺点

当系统中对象很多时,中介者对象可能会变得非常复杂。

适用场景

当一个系统由许多对象组成,而这些对象之间的交互非常频繁时。

当对象之间的交互变得非常复杂时,使用中介者模式可以简化对象之间的交互。

示例:设置一个聊天室系统,用户之间的消息传递通过一个聊天室中介者进行。

java 复制代码
// 中介者接口
interface Mediator {
    void sendMessage(String message, User user);
}

// 具体中介者
class ChatRoom implements Mediator {
    public void sendMessage(String message, User user) {
        System.out.println("From " + user.getName() + " to all: " + message);
    }
}

// 同事类接口
abstract class User {
    protected String name;
    protected Mediator mediator;

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

    public abstract void receiveMessage(String message);
}

// 具体同事类
class ConcreteUser extends User {
    public ConcreteUser(String name, Mediator mediator) {
        super(name, mediator);
    }

    public void receiveMessage(String message) {
        System.out.println("To " + name + " " + message);
    }

    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Mediator mediator = new ChatRoom();
        User user1 = new ConcreteUser("User1", mediator);
        User user2 = new ConcreteUser("User2", mediator);

       ((ConcreteUser) user1).sendMessage("Hello, User2!");
       ((ConcreteUser) user2).sendMessage("Hi, User1!");
    }
}
相关推荐
小bo波23 分钟前
枚举实战
java·设计模式·枚举·后端开发·代码重构
不好听6134 小时前
Prompt 驱动 NLP:用大语言模型重新定义自然语言处理开发范式
设计模式·node.js·nlp
天文家6 小时前
深入理解装饰器与适配器:从设计模式到 Spring AOP 的工程实践
java·设计模式
workflower7 小时前
医院核心竞争力的四大重构
人工智能·安全·设计模式·重构·动态规划·scrum
折哥的程序人生 · 物流技术专研12 小时前
【电商多平台电子面单对接实战|第二篇】抖音代发电子面单对接:从“面条代码”到整洁架构的涅槃之路
设计模式·架构·系统架构·单元测试·代码规范·单一职责原则
葫芦和十三13 小时前
范式之变|Agent 设计,换语言了
人工智能·设计模式
ourenjiang13 小时前
【学习设计模式】原型模式
学习·设计模式·原型模式
贵慜_Derek13 小时前
《从零实现 Agent 系统》连载 20|MCP 与 Code Execution:协议、档位与 Sidecar
人工智能·设计模式·架构
Sam_Deep_Thinking1 天前
结算分摊的策略模式:不同营销活动的扣点计算方案
java·设计模式·架构·系统架构
故渊at2 天前
系列一:架构思想进阶 | 第3篇 SOLID 原则与设计模式实战:从“代码搬运工”到“架构师”的必经之路
观察者模式·设计模式·重构·架构·代理模式