Java设计模式之中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互,将对象之间的通信转移到一个中介者对象中,从而降低对象之间的耦合度。中介者模式通过集中控制对象之间的交互,使得对象之间的通信变得简单明确,同时也易于扩展和维护。

在中介者模式中,对象之间的通信不再直接发生,而是通过中介者对象进行调度和协调。当一个对象需要与其他对象进行交互时,它不需要直接引用其他对象,而是通过中介者对象来发送消息或者调用方法。中介者负责将消息传递给相关的对象,并协调它们的行为。

以下是一个示例,说明中介者模式的工作原理:

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

// 具体中介者
public class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void setColleague1(Colleague colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague colleague2) {
        this.colleague2 = colleague2;
    }

    @Override
    public void sendMessage(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.receiveMessage(message);
        } else if (colleague == colleague2) {
            colleague1.receiveMessage(message);
        }
    }
}

// 抽象同事类
public abstract class Colleague {
    protected Mediator mediator;

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

    public abstract void send(String message);
    public abstract void receiveMessage(String message);
}

// 具体同事类
public class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

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

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

// 具体同事类
public class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

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

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

// 客户端代码
public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("Hello, colleague2!");
        colleague2.send("Hi, colleague1!");
    }
}

在上面的示例中,中介者模式的核心是Mediator接口和ConcreteMediator类。Mediator接口定义了中介者的方法,ConcreteMediator类实现了具体的中介者逻辑,并负责将消息传递给相关的同事对象。

Colleague是抽象同事类,定义了同事对象的基本行为,包括发送消息和接收消息的方法。ConcreteColleague1ConcreteColleague2是具体的同事类,它们通过中介者对象来发送消息和接收消息。

在客户端代码中,创建了一个中介者对象和两个具体的同事对象。通过设置中介者对象的同事对象,建立了同事对象与中介者对象之间的关联。然后,通过调用同事对象的send方法来发送消息,中介者对象会将消息传递给相关的同事对象,并调用它们的receiveMessage方法来接收消息。

中介者模式的优点是将对象之间的通信集中管理,降低了对象之间的耦合度,使得系统更易于维护和扩展。然而,过度使用中介者模式可能导致中介者对象变得庞大复杂,降低了系统的性能和可维护性,因此在使用中介者模式时需要权衡利弊。

相关推荐
yhole1 分钟前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
zjjsctcdl2 分钟前
SpringBoot3.3.0集成Knife4j4.5.0实战
java
彭于晏Yan3 分钟前
Spring Boot 集成邮件服务实现发送邮件功能
java·spring boot·后端
浮尘笔记4 分钟前
Java Snowy 框架生产环境安全部署全流程(服务器篇)
java·运维·服务器·开发语言·后端
宸津-代码粉碎机5 分钟前
Spring Boot 4.0虚拟线程实战续更预告:高阶技巧、监控排查与分布式场景落地指南
java·大数据·spring boot·分布式·后端·python
Rsun045517 分钟前
6、Java 适配器模式从入门到实战
java·开发语言·适配器模式
MaCa .BaKa9 分钟前
52-考研备考服务平台系统-考研系统
java·spring boot·mysql·考研·tomcat·maven·mybatis
_深海凉_11 分钟前
LeetCode热题100-最长公共子序列
java·开发语言·前端
8Qi814 分钟前
Elasticsearch实战篇:索引库、文档与JavaRestClient操作指南
java·大数据·elasticsearch·搜索引擎·微服务·架构·springcloud
落羽的落羽14 分钟前
【Linux系统】深入线程:多线程的互斥与同步原理,封装实现两种生产者消费者模型
java·linux·运维·服务器·c++·人工智能·python