开发者社区 问答 正文

中介者模式如何优化Java代码,适用于什么样的场景?以及它的Java实现是怎样的

中介模式如何优化Java代码,适用于什么样的场景?以及它的Java实现是怎样的

展开
收起
人间蜉蝣 2021-11-03 18:28:02 475 分享 版权
阿里云 AI 助理回答

中介模式(Mediator Pattern)是一种行为设计模式,它通过提供一个中介类来封装一系列对象之间的交互,使这些对象不必相互引用,从而降低它们之间的耦合度。这种模式适用于那些对象之间存在复杂的网状结构,直接通信会导致高耦合和难以维护的场景,比如用户界面组件、模块间的协调工作等。

适用场景

  1. 多个对象需要相互通信,但不希望它们之间形成紧耦合:通过中介者统一管理对象间的交互,可以减少对象间的直接依赖。
  2. 系统中对象之间的交互复杂且易变:使用中介者模式可以使对象间的交互集中管理,便于修改和扩展。
  3. 需要对多个对象的行为进行集中控制或协调:例如,在GUI应用程序中,窗口、按钮、文本框等组件之间的交互可以通过一个中介者(如事件处理器)来协调。

Java实现示例

下面是一个简单的Java实现示例,展示如何应用中介模式来简化用户界面组件之间的通信:

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

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

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

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

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

// 同事抽象类
abstract class Colleague {
    protected Mediator mediator;

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

    abstract void receiveMessage(String message);
}

// 具体同事类1
class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

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

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

// 具体同事类2
class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

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

// 客户端代码
public class Main {
    public static void main(String[] args) {
        Mediator mediator = new ConcreteMediator();
        Colleague colleague1 = new ConcreteColleague1(mediator);
        Colleague colleague2 = new ConcreteColleague2(mediator);

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

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

在这个例子中,ConcreteColleague1ConcreteColleague2 是两个需要互相通信的对象,但它们并不直接调用对方的方法,而是通过 ConcreteMediator 这个中介者来进行消息传递,这样就降低了它们之间的耦合度。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答