中介者模式

学习目标:

  • 中介者模式

学习内容:

中介者模式(Mediator Pattern)是一种行为设计模式,它通过引入一个中介者对象来封装一组对象之间的交互,避免对象之间的直接引用,从而降低它们之间的耦合度,使得对象之间的交互更加灵活和可扩展。

中介者模式的核心思想

  • 引入中介者对象:中介者对象负责管理和协调其他对象之间的交互。
  • 去除对象之间的直接引用:所有对象通过中介者进行通信,而不是直接调用彼此的方法。
  • 集中管理交互逻辑:将复杂的交互逻辑集中到中介者对象中,简化各对象的职责。

中介者模式的组成部分

  • 中介者接口(Mediator Interface):定义中介者的基本操作,通常是协调不同同事(Colleague)对象的方法。
  • 具体中介者(Concrete Mediator):实现中介者接口,协调各个同事对象的交互。
  • 同事类(Colleague Class):各个需要进行交互的对象,持有对中介者的引用,通过中介者与其他对象通信。

中介者模式的实现

以一个简单的聊天室为例,每个用户通过聊天室中介者发送和接收消息:

// 中介者接口

interface ChatMediator {
    void sendMessage(String message, User user);
    void addUser(User user);
}

// 具体中介者

class ChatMediatorImpl implements ChatMediator {
    private List<User> users = new ArrayList<>();

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

    @Override
    public void sendMessage(String message, User user) {
        for (User u : users) {
            if (u != user) {
                u.receive(message);
            }
        }
    }
}

// 同事类

abstract class User {
    protected ChatMediator mediator;
    protected String name;

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

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

// 具体同事类

class UserImpl extends User {
    public UserImpl(ChatMediator mediator, String name) {
        super(mediator, name);
    }

    @Override
    public void send(String message) {
        System.out.println(this.name + " 发送消息: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println(this.name + " 接收到消息: " + message);
    }
}

// 客户端代码

public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator chatMediator = new ChatMediatorImpl();
        
        User user1 = new UserImpl(chatMediator, "Alice");
        User user2 = new UserImpl(chatMediator, "Bob");
        User user3 = new UserImpl(chatMediator, "Charlie");

        chatMediator.addUser(user1);
        chatMediator.addUser(user2);
        chatMediator.addUser(user3);

        user1.send("Hello everyone!");
    }
}

在这个例子中:

  • ChatMediator 定义了中介者的接口。
  • ChatMediatorImpl 是具体的中介者,负责协调用户之间的消息发送。
  • User 是抽象的同事类,定义了发送和接收消息的方法。
  • UserImpl 是具体的同事类,通过中介者发送和接收消息。

中介者模式的优缺点

优点

  • 降低耦合:对象之间的耦合度降低,改动一个对象不会影响其他对象。
  • 集中控制:交互逻辑集中在中介者中,便于维护和扩展。
  • 简化对象:各个对象只需关注自身的功能,不需要处理复杂的交互逻辑。

缺点

  • 中介者复杂度增加:随着系统的扩展,中介者可能变得复杂,难以维护。
  • 潜在的性能问题:集中化的中介者可能成为性能瓶颈,尤其是在大量对象频繁交互的场景中。

适用场景

  • 复杂对象之间的交互需要集中管理。
  • 系统中对象之间的交互逻辑复杂且多变。
  • 需要解耦对象之间的依赖关系,提高系统的可扩展性和可维护性。

通过中介者模式,可以更好地管理对象之间的交互,提升系统的灵活性和可维护性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java 猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值