设计模式(行为型模式)中介者模式

目录

    • 一、简介
    • 二、中介者模式
      • 2.1、中介者接口
      • 2.2、具体中介者
      • 2.3、同事对象
      • 2.4、使用
    • 三、优点与缺点

一、简介

  中介者模式(Mediator Pattern)是一种行为设计模式,旨在减少对象之间的直接通信,通过引入一个中介对象(中介者)来集中控制和协调这些对象之间的交互。中介者模式的定义如下:

  中介者模式指的是使用一个中介对象来封装一系列对象之间的交互,使得对象之间不再显式地相互引用,而是通过中介者对象来进行通信。这样一来,对象之间的耦合度降低,增加新对象也更加容易,因为它们不需要知道彼此的细节,只需了解中介者的接口即可。中介者模式包含以下主要角色:

  • 中介者(Mediator):定义了一个接口,用于各个同事对象之间的通信。
  • 具体中介者(Concrete Mediator):实现了中介者接口,负责协调各个同事对象,并处理它们之间的交互关系。
  • 同事对象(Colleague):每个同事对象都知道中介者对象,与其他同事对象之间通过中介者对象进行通信。

  通过中介者模式,对象之间的通信被封装到中介者对象中,对象之间的直接联系减少,降低了耦合性,提高了代码的可维护性和灵活性。这种模式特别适用于对象之间的交互较复杂、互相依赖性较高的情况。

二、中介者模式

  当涉及实际的聊天室示例时,涉及到实时通信、用户界面等复杂性,这在文字交流中无法完全展示。以下是一个简化的 Java 示例,模拟了聊天室的基本功能,用于演示中介者模式的基本思想:

2.1、中介者接口

// 中介者接口
public interface ChatRoomMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}

2.2、具体中介者

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

// 具体中介者 - 聊天室
public class ChatRoom implements ChatRoomMediator {
    private List<User> users;

    public ChatRoom() {
        this.users = new ArrayList<>();
    }

    @Override
    public void sendMessage(String message, User user) {
        for (User u : users) {
            // 排除发送者,向其他用户发送消息
            if (u != user) {
                u.receive(message);
            }
        }
    }

    @Override
    public void addUser(User user) {
        users.add(user);
    }
}

2.3、同事对象

// 同事对象 - 用户
public class User {
    private String name;
    private ChatRoomMediator mediator;

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

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

    public void receive(String message) {
        System.out.println(name + " 接受的消息: " + message);
    }
}

2.4、使用

// 测试类
public class MediatorPatternExample {
    public static void main(String[] args) {
        ChatRoomMediator chatRoom = new ChatRoom();

        User user1 = new User("程咬金", chatRoom);
        User user2 = new User("妲己", chatRoom);
        User user3 = new User("赵子龙", chatRoom);

        user1.send("Hello, 我是程咬金!");
        user2.send("Hi, 妲己来了!");
        user3.send("Ha, 常山赵子龙在此!");
    }
}

运行结果:

妲己 接受的消息: Hello, 我是程咬金!
赵子龙 接受的消息: Hello, 我是程咬金!
程咬金 接受的消息: Hi, 妲己来了!
赵子龙 接受的消息: Hi, 妲己来了!
程咬金 接受的消息: Ha, 常山赵子龙在此!
妲己 接受的消息: Ha, 常山赵子龙在此!

  这个简化的示例展示了中介者模式在聊天室场景中的应用。ChatRoom 充当中介者,负责用户之间的消息分发;User 是同事对象,通过中介者发送消息。在测试类中,演示了用户发送消息并接收消息的过程。这个例子是一个简单的演示,实际的聊天室系统要复杂得多,包括实时通信、界面等功能。

三、优点与缺点

  中介者模式具有以下优点和缺点:

优点

  • 减少耦合度: 中介者模式可以减少对象之间的直接引用,使得对象之间的交互由中介者统一处理,降低了对象之间的耦合度。
  • 简化对象间交互: 通过中介者模式,对象之间的交互变得更加简单明了,各个对象只需要与中介者进行通信,而不需要了解其他对象的细节信息。
  • 易于扩展维护: 新增、删除或修改一个同事对象或中介者对象相对容易,由于对象之间的交互关系由中介者负责,可以更灵活地扩展和维护系统。
  • 集中控制逻辑: 中介者模式将交互逻辑集中到中介者对象中,易于控制和管理系统的逻辑。

缺点

  • 中介者过于复杂: 如果中介者承担了太多的职责,可能会变得过于复杂,导致中介者本身成为一个大而全的类,难以维护和理解。
  • 可能导致性能问题: 中介者模式可能导致性能问题,特别是当中介者对象变得庞大,处理逻辑复杂时,可能会影响系统的性能。

  总的来说,中介者模式适用于系统中对象之间的交互较为复杂、对象之间耦合度较高的场景。它能够有效地将对象之间的交互逻辑进行集中管理,但在使用过程中需要注意合理分配中介者的职责,避免中介者过于臃肿。

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