📜  设计模式-中介模式(1)

📅  最后修改于: 2023-12-03 15:12:08.626000             🧑  作者: Mango

设计模式-中介模式

简介

中介模式是一种行为型设计模式,它提供了一个对象,该对象封装了一组对象间的交互方式,从而使各对象间的耦合度降低。

核心思想

中介模式将各个对象的交互逻辑封装到中介对象中,从而使各个对象只需要与中介对象进行通信,而不需要了解其他对象的存在。

角色定义
  • 中介者(Mediator):定义了各个对象之间的交互方式,负责协调各对象之间的交互关系。
  • 具体中介者(Concrete Mediator):实现了中介者接口,实现了各个对象之间的交互方式。
  • 同事(Colleague):定义了对象之间的接口,负责发送和接收消息。
  • 具体同事(Concrete Colleague):实现了同事接口,负责实现对象之间的交互。
代码实现

具体代码实现请参考下方的示例:

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

// 具体中介者
class ConcreteMediator implements Mediator {

    private Colleague colleagueA;
    private Colleague colleagueB;

    public void setColleagueA(Colleague colleagueA) {
        this.colleagueA = colleagueA;
    }

    public void setColleagueB(Colleague colleagueB) {
        this.colleagueB = colleagueB;
    }

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

// 同事接口
interface Colleague {
    void receiveMessage(String message);
}

// 具体同事A
class ConcreteColleagueA implements Colleague {

    private Mediator mediator;

    public ConcreteColleagueA(Mediator mediator) {
        this.mediator = mediator;
    }

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

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

// 具体同事B
class ConcreteColleagueB implements Colleague {

    private Mediator mediator;

    public ConcreteColleagueB(Mediator mediator) {
        this.mediator = mediator;
    }

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

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

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

        Colleague colleagueA = new ConcreteColleagueA(mediator);
        Colleague colleagueB = new ConcreteColleagueB(mediator);

        ((ConcreteMediator) mediator).setColleagueA(colleagueA);
        ((ConcreteMediator) mediator).setColleagueB(colleagueB);

        colleagueA.sendMessage("Hello, colleague B!");
        colleagueB.sendMessage("Hi, colleague A!");
    }
}
优缺点分析
优点
  • 中介者模式将各个对象之间的交互逻辑封装到中介者中,可以使各对象间的耦合度降低,更易于维护和扩展。
  • 中介者模式使得各对象之间的关系更加松散,更易于复用和测试。
缺点
  • 中介者模式会增加中介者对象的复杂度,需要实现各个对象之间的交互方式,增加了代码的复杂度。
适用场景
  • 各个对象之间的交互复杂且需要能够动态地变化。
  • 各个对象之间的耦合度过高,需要进行解耦。
  • 需要核心模块,而其他模块都围绕着它而存在。
总结

中介者模式适用于大型的对象交互系统,它可以解决各对象之间交互复杂、耦合度过高等问题,从而降低系统的复杂度和维护难度。在实际开发中,可以根据具体的业务场景选择是否采用中介模式。