返回

剖析中介者模式的奥义:调停沟通之道

后端

中介者模式:沟通协调的艺术

中介者模式是一种行为设计模式,旨在解决多对多对象之间错综复杂的依赖关系。它通过引入一个中介者对象,将原本直接相互交互的对象间接地联系起来。如此一来,中介者对象便肩负起了协调各方沟通的重任,有效地简化了系统结构,降低了耦合度。

中介者模式的优点

采用中介者模式,软件设计将受益匪浅:

  • 降低耦合度: 通过中介者对象作为交互媒介,对象之间的直接依赖关系被打破,耦合度大幅降低。
  • 提高灵活性: 中介者模式增强了系统的灵活性,当系统中某个对象发生变化时,仅需修改中介者对象即可,而无需修改其他对象。
  • 简化维护: 中介者模式将对象之间的交互集中在中介者对象上,简化了系统的维护工作。

中介者模式的应用场景

中介者模式在软件开发中有着广泛的应用,以下是一些典型场景:

  • GUI 应用程序: 中介者模式可用于管理 GUI 组件之间的交互,如按钮、文本框和复选框等。
  • 分布式系统: 中介者模式可用于协调分布式系统中不同组件之间的通信。
  • 多线程编程: 中介者模式可用于协调多线程之间的通信和同步。

中介者模式的结构与实现

中介者模式的核心结构包括中介者对象和具体对象。中介者对象负责协调具体对象之间的通信,具体对象则通过中介者对象与其他对象进行交互。

中介者对象的职责

中介者对象的职责如下:

  • 管理具体对象: 中介者对象负责管理具体对象,包括添加、删除和修改具体对象。
  • 协调具体对象之间的交互: 中介者对象负责协调具体对象之间的交互,并确保它们能够正确地协作。

具体对象的职责

具体对象的职责如下:

  • 与中介者对象交互: 具体对象通过中介者对象与其他对象进行交互。
  • 处理来自中介者对象的消息: 具体对象负责处理来自中介者对象的消息,并做出相应的响应。

中介者模式的代码示例

以下是用 Java 语言实现的中介者模式代码示例:

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

// 具体中介者类
class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues = new ArrayList<>();

    @Override
    public void register(Colleague colleague) {
        colleagues.add(colleague);
    }

    @Override
    public void relay(Colleague colleague, String message) {
        for (Colleague c : colleagues) {
            if (c != colleague) {
                c.receive(message);
            }
        }
    }
}

// 同事接口
interface Colleague {
    void setMediator(Mediator mediator);
    void send(String message);
    void receive(String message);
}

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

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

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

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

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

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

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

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

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

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

        colleagueA.setMediator(mediator);
        colleagueB.setMediator(mediator);

        colleagueA.send("Hello, ColleagueB!");
        colleagueB.send("Hello, ColleagueA!");
    }
}

结语

中介者模式作为一种设计模式,为软件设计者提供了一种有效的方式来管理对象之间的依赖关系。通过引入中介者对象,中介者模式将原本错综复杂的依赖关系简化为了清晰明了的通信渠道,从而降低了系统的耦合度,提高了系统的灵活性。在分布式系统、GUI 应用程序和多线程编程等领域,中介者模式都得到了广泛的应用。