【Java 设计模式】行为型之中介者模式

文章目录

    • 1. 定义
    • 2. 应用场景
    • 3. 代码实现
    • 结语

中介者模式(Mediator Pattern)是一种行为型设计模式,用于通过一个中介对象来集中管理多个对象之间的交互关系,从而降低对象之间的耦合度。中介者模式通过将对象之间的通信委托给中介者,使得对象之间不直接相互通信,而是通过中介者来进行交互。在本文中,我们将深入研究Java中中介者模式的定义、结构、使用场景以及如何在实际开发中应用。

1. 定义

中介者模式是一种行为型设计模式,用于通过一个中介对象来集中管理多个对象之间的交互关系,从而降低对象之间的耦合度。中介者模式通过将对象之间的通信委托给中介者,使得对象之间不直接相互通信,而是通过中介者来进行交互。中介者模式通常包含三个主要角色:抽象中介者(Abstract Mediator)、具体中介者(Concrete Mediator)、同事类(Colleague)。

  • 抽象中介者(Abstract Mediator): 定义了中介者的接口,负责定义同事类之间的通信方法
  • 具体中介者(Concrete Mediator): 实现了抽象中介者的接口,负责管理和协调同事类之间的交互
  • 同事类(Colleague): 每个同事类都知道中介者对象,并与中介者对象通信,但不知道其他同事类的存在

2. 应用场景

中介者模式通常在以下场景中使用:

  • 一组对象之间存在复杂的交互关系:

    当一组对象之间存在复杂的交互关系,对象之间的关系变得紧密时,可以使用中介者模式来降低对象之间的耦合度

  • 多个对象需要相互通信,但不希望直接依赖彼此:

    当多个对象需要相互通信,但不希望直接依赖彼此时,可以使用中介者模式,将对象之间的通信委托给中介者

  • 系统中对象之间的交互较为复杂,难以维护:

    当系统中对象之间的交互关系较为复杂,难以维护时,可以使用中介者模式来简化系统结构

3. 代码实现

下面通过一个简单的例子来演示中介者模式的实现。假设有一个聊天室系统,多个用户之间可以进行聊天,我们可以使用中介者模式来管理用户之间的交互。

抽象中介者 - 聊天室 ChatRoomMediator

package com.cheney.demo;

interface ChatRoomMediator {
    void sendMessage(UserColleague sender, String message);
}

具体中介者 - 具体聊天室 ConcreteChatRoomMediator

package com.cheney.demo;

class ConcreteChatRoomMediator implements ChatRoomMediator {
    @Override
    public void sendMessage(UserColleague sender, String message) {
        System.out.println(sender.getName() + " 发送消息: " + message);
    }
}

同事类 - 用户 UserColleague

package com.cheney.demo;

class UserColleague {
    private String name;
    private ChatRoomMediator mediator;

    public UserColleague(String name, ChatRoomMediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }

    public String getName() {
        return name;
    }

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

客户端启动类 Main

package com.cheney.demo;

public class Main {
    public static void main(String[] args) {
        // 使用中介者模式实现聊天室系统
        ChatRoomMediator mediator = new ConcreteChatRoomMediator();

        UserColleague user1 = new UserColleague("用户1", mediator);
        UserColleague user2 = new UserColleague("用户2", mediator);
        UserColleague user3 = new UserColleague("用户3", mediator);

        // 用户1 发送消息: 哈喽!
        user1.sendMessage("哈喽!");
        // 用户2 发送消息:  哈喽!
        user2.sendMessage(" 哈喽!");
        // 用户3 发送消息:  哈喽!
        user3.sendMessage(" 哈喽!");
    }
}

在上述例子中,ChatRoomMediator 是抽象中介者,定义了中介者的接口。ConcreteChatRoomMediator 是具体中介者,实现了抽象中介者的接口,负责管理和协调用户之间的交互。UserColleague 是同事类,每个用户都知道中介者对象,并通过中介者对象进行通信。

在客户端中,我们使用中介者模式实现了聊天室系统。通过将用户之间的通信委托给中介者,实现了用户之间的解耦,使得系统更加灵活和可扩展。

结语

中介者模式是一种用于通过一个中介对象来集中管理多个对象之间的交互关系的设计模式。通过使用中介者模式,可以降低对象之间的耦合度,使得系统更加灵活和可扩展。在实际开发中,中介者模式常被用于实现复杂的系统中对象之间的交互关系,例如聊天室、飞机控制系统等。通过合理使用中介者模式,可以提高系统的可维护性和可扩展性。

你可能感兴趣的:(设计模式,java,设计模式,中介者模式)