Java Mediator 模式实现

概述

在软件开发中,Mediator(中介者)模式是一种行为设计模式,它通过封装一系列对象相互之间的交互,使得这些对象不需要显式地相互引用,从而使其松散耦合。中介者模式可以对对象间的一对多关系进行集中管理,避免了多对多关系导致的复杂性。

在 Java 中,我们可以使用接口或抽象类来定义中介者,同时使用具体类来实现中介者的逻辑。中介者模式的实现需要以下几个步骤:创建中介者接口或抽象类、创建具体中介者类、创建同事类、在同事类中使用中介者进行交互。

步骤

步骤 描述
1. 定义中介者接口或抽象类 创建一个 Mediator 接口或抽象类,定义同事类之间的通信方法。
2. 创建具体中介者类 创建一个具体的中介者类,实现中介者接口或抽象类,以管理同事类之间的通信。
3. 创建同事类 创建多个同事类,它们之间相互独立,但需要通过中介者进行交互。
4. 在同事类中使用中介者进行交互 在同事类中通过中介者的方法进行通信,而不是直接与其他同事类交互。

代码实现

定义中介者接口或抽象类

// Mediator.java

public interface Mediator {
    void sendMessage(String message, Colleague colleague);
}

这里定义了一个 Mediator 接口,其中包含一个 sendMessage 方法,用于同事类之间的通信。

创建具体中介者类

// ConcreteMediator.java

public 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 if (colleague == colleague2) {
            colleague1.receiveMessage(message);
        }
    }
}

在具体中介者类 ConcreteMediator 中,实现了 Mediator 接口,并定义了两个同事类的引用 colleague1 和 colleague2。在 sendMessage 方法中根据不同的同事类发送消息给另一个同事类。

创建同事类

// Colleague.java

public abstract class Colleague {
    protected Mediator mediator;

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

    public abstract void sendMessage(String message);
    public abstract void receiveMessage(String message);
}

同事类 Colleague 是一个抽象类,其中包含一个 Mediator 的引用 mediator,并定义了 sendMessage 和 receiveMessage 方法。

// ConcreteColleague1.java

public class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

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

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

具体同事类 ConcreteColleague1 继承自同事类 Colleague,实现了 sendMessage 和 receiveMessage 方法。在 sendMessage 方法中,通过中介者 mediator 发送消息给其他同事类。

// ConcreteColleague2.java

public class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

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

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

具体同事类 ConcreteColleague2 也继承自同事类 Colleague,实现了 sendMessage 和 receiveMessage 方法。

在同事类中使用中介者进行交互

// Main.java

public class Main {
    public static void main(String