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