4.5 中介者模式 (Mediator Pattern)

中介者模式作为一种行为型设计模式,其核心在于解耦系统中对象之间的交互关系。它通过引入一个中介者对象,来集中管理对象之间的通信,从而避免对象之间直接相互引用,降低了系统的耦合性,也提升了系统的可维护性和可扩展性。

1. 核心思想

想象一下一个热闹的聊天室,如果每个人都要直接和其他所有人建立联系才能发送消息,那将是多么混乱和复杂!中介者模式就像聊天室里的管理员,所有用户只需要把消息发送给管理员,管理员会负责将消息转发给对应的接收者。

中介者模式的核心思想就是:将网状结构的复杂交互关系,转化为以中介者为中心的星形结构

2. 组成要素

  • Mediator (中介者): 定义了同事对象之间进行通信的接口。
  • ConcreteMediator (具体中介者): 实现了 Mediator 接口,负责协调各个同事对象之间的交互。
  • Colleague (同事类): 表示参与交互的各个对象,每个同事类都知道中介者对象,并且与其他同事类进行通信时,都通过中介者对象来完成。

3. 代码示例 (Java)

// 中介者接口
interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

// 具体中介者
class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void setColleague1(Colleague colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague colleague2) {
        this.colleague2 = colleague2;
    }

    @Override
    public void sendMessage(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.receiveMessage(message);
        } else {
            colleague1.receiveMessage(message);
        }
    }
}

// 同事类接口
interface Colleague {
    void setMediator(Mediator mediator);
    void receiveMessage(String message);
    void sendMessage(String message);
}

// 具体同事类 1
class ConcreteColleague1 implements Colleague {
    private Mediator mediator;

    @Override
    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("Colleague1 received message: " + message);
    }

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

// 具体同事类 2
class ConcreteColleague2 implements Colleague {
    private Mediator mediator;

    @Override
    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("Colleague2 received message: " + message);
    }

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

// 测试
public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();

        ConcreteColleague1 colleague1 = new ConcreteColleague1();
        ConcreteColleague2 colleague2 = new ConcreteColleague2();

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.setMediator(mediator);
        colleague2.setMediator(mediator);

        colleague1.sendMessage("Hello from Colleague1!");
        colleague2.sendMessage("Hi from Colleague2!");
    }
}

4. 使用场景

  • 对象之间存在复杂的交互关系,并且这些关系是动态变化的。
  • 希望将对象之间的交互逻辑集中管理,以便于维护和扩展。
  • 不希望对象之间直接相互依赖,降低系统耦合度。

5. 优缺点

优点:

  • 降低了对象之间的耦合度。
  • 简化了对象之间的交互逻辑。
  • 易于扩展新的同事类。

缺点:

  • 中介者类可能会变得很复杂,承担过多的责任。

6. 总结

中介者模式提供了一种有效的方式来管理对象之间的交互,它可以降低系统的耦合度,提高系统的可维护性和可扩展性。但是,在使用中介者模式时,需要注意中介者类的复杂度,避免中介者类承担过多的责任。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值