设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景

发布时间:2023年12月23日


一、快速理解中介者模式

中介者模式是一种行为型设计模式,它允许多个对象之间通过一个中介者对象进行通信和协作。中介者模式将对象之间的交互行为集中在一个中介者对象中,降低了对象之间的耦合度,使其更易于理解和维护。

在现实生活中,中介者模式的例子可以是机场的塔台。塔台(中介者对象)负责协调不同飞机(对象)之间的起飞和降落,飞机之间无需直接相互通信,而是通过塔台进行交流。

二、使用场景

使用中介者模式的主要场景包括:

  1. 当一组对象之间的通信产生复杂的依赖关系时,可以使用中介者模式将其简化。中介者对象负责管理对象之间的通信,避免了对象之间的直接耦合。
  2. 当一组对象之间的交互行为需要进行集中控制时,可以使用中介者模式。中介者对象可以维护和管理对象之间的关系,并根据需要调整对象之间的交互行为。

三、示例代码

下面是一个通俗易懂的中介者模式示例代码,以聊天室为场景:

// 抽象中介者:聊天室
interface ChatRoom {
    void sendMessage(String message, User user);
}

// 具体中介者:具体聊天室
class ConcreteChatRoom implements ChatRoom {
    @Override
    public void sendMessage(String message, User user) {
        System.out.println(user.getName() + " 发送消息:" + message);
    }
}

// 抽象同事类:用户
abstract class User {
    protected String name;
    protected ChatRoom chatRoom;

    public User(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }

    public String getName() {
        return name;
    }

    public abstract void sendMessage(String message);
}

// 具体同事类:普通用户
class OrdinaryUser extends User {
    public OrdinaryUser(String name, ChatRoom chatRoom) {
        super(name, chatRoom);
    }

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

// 具体同事类:VIP用户
class VipUser extends User {
    public VipUser(String name, ChatRoom chatRoom) {
        super(name, chatRoom);
    }

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

// 客户端代码
public class Main {
    public static void main(String[] args) {
        ChatRoom chatRoom = new ConcreteChatRoom();

        User user1 = new OrdinaryUser("Tom", chatRoom);
        User user2 = new OrdinaryUser("Jerry", chatRoom);
        User user3 = new VipUser("Alice", chatRoom);

        user1.sendMessage("Hello everyone!");
        user2.sendMessage("Hi Tom!");
        user3.sendMessage("Nice to meet you all.");
    }
}

在上面的示例中,ChatRoom是抽象中介者接口,定义了用户发送消息的方法。ConcreteChatRoom是具体中介者类,实现了抽象中介者接口,并在sendMessage方法中处理用户发送的消息。

User是抽象同事类,定义了用户的名称和中介者对象。OrdinaryUser和VipUser是具体同事类,分别实现了抽象同事类的发送消息方法,并在其中调用中介者对象的方法。

在客户端代码中,首先创建了一个具体中介者对象chatRoom。然后创建了多个具体同事对象,包括普通用户和VIP用户。最后,每个用户通过调用发送消息方法向聊天室发送消息。

通过使用中介者模式,可以将对象之间的通信行为集中在一个中介者对象中,减少了对象之间的直接依赖和耦合。中介者模式提供了一种简化复杂交互的方式,使对象之间的通信更加简单和可控。

文章来源:https://blog.csdn.net/qq_42262444/article/details/135161732
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。