目录

什么是中介模式

中介模式的组成

使用场景:

优点:

缺点:

Java 示例代码:


什么是中介模式

Java 中的中介模式(Mediator Pattern)是一种行为型设计模式,旨在降低多个对象和类之间的通信复杂性。通过这种模式,对象之间不直接通信,而是通过一个中介对象来协调他们之间的交互。这有助于减少系统中组件的相互依赖性,从而提高组件的可重用性和可维护性。

中介模式的组成

  1. 中介者接口(Mediator):定义了用于通信的方法,可以是接口或抽象类。
  2. 具体中介者(Concrete Mediator):实现中介者接口,并协调多个不同组件之间的交互。具体中介者知道所有的具体同事类,并从具体同事接收消息,向它们发送命令。
  3. 同事类(Colleague):与其他对象交互时,不是直接通信,而是通过中介者来交互。

使用场景:

  • 当多个类相互交互形成网状结构时,使用中介模式可以将网状结构转化为以中介者为核心的星型结构。
  • 减少类之间的依赖,降低耦合度。
  • 当一个对象群的行为是互相协作的紧密型群体时,可以通过中介者封装这些交互。

优点:

  • 减少了类间的直接通讯,降低了系统的复杂性。
  • 有助于单一职责原则,可以将交互的管理和协调职责委托给中介者对象。
  • 更容易理解和维护系统中的交互。

缺点:

  • 中介者可能会变得过于复杂,自身成为一个难以维护的大类。
  • 有可能过度使用,使得一些本可以直接通信的类也通过中介者来通信,可能引入不必要的复杂性。

Java 示例代码:

        这里是一个简单的中介者模式实现的例子,展示如何在聊天室中使用中介者模式来交流:

// 中介者接口
interface ChatMediator {
    void sendMessage(String msg, User user);
    void addUser(User user);
}

// 具体中介者
class ChatRoom implements ChatMediator {
    private List<User> users;

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

    @Override
    public void sendMessage(String msg, User user) {
        for(User u : users){
            // 不发送消息给自己
            if(u != user){
                u.receive(msg);
            }
        }
    }

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

// 同事类
abstract class User {
    protected ChatMediator mediator;
    protected String name;

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

    public abstract void send(String msg);

    public abstract void receive(String msg);
}

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

    @Override
    public void send(String msg) {
        System.out.println(this.name + ": Sending Message = " + msg);
        mediator.sendMessage(msg, this);
    }

    @Override
    public void receive(String msg) {
        System.out.println(this.name + ": Received Message = " + msg);
    }
}

public class Main {
    public static void main(String[] args) {
        ChatMediator mediator = new ChatRoom();
        User user1 = new ConcreteUser(mediator, "John");
        User user2 = new ConcreteUser(mediator, "Doe");
        mediator.addUser(user1);
        mediator.addUser(user2);
        user1.send("Hi there!");
        user2.send("Hello!");
    }
}

         在这个示例中,ChatRoom 充当中介者,User 和其子类 ConcreteUser 充当同事类。通过中介者,同事类之间能够交换消息,而无需直接互相引用。

        非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~

04-23 09:28