Java实现中介者模式
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过将对象之间的交互转移给中介者对象来实现。在这种模式中,对象之间不直接相互通信,而是通过中介者对象来进行通信和协调。
适用场景:
1. 当一个对象的改变需要同时改变其他对象时,可以使用中介者模式。通过引入中介者对象,可以将对象之间的耦合度降低,减少了对象之间的直接交互。
2. 当一个交互过程中涉及到大量的对象之间的交互,导致复杂的交互关系时,可以使用中介者模式来简化交互流程。
好处:
1. 减少了对象之间的直接耦合,使得代码更易于维护和拓展。
2. 将关注点集中到中介者对象上,使得代码更加清晰和易于理解。
3. 可以避免对象之间的循环依赖,提高代码的灵活性。
下面是一个使用Java实现中介者模式的示例代码:
// 中介者接口
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// 具体中介者
class ConcreteMediator implements Mediator {
private ColleagueA colleagueA;
private ColleagueB colleagueB;
public void setColleagueA(ColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setColleagueB(ColleagueB 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);
}
}
}
// 抽象同事类
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);
}
// 具体同事类A
class ColleagueA extends Colleague {
public ColleagueA(Mediator mediator) {
super(mediator);
}
@Override
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
@Override
public void receiveMessage(String message) {
System.out.println("ColleagueA received message: " + message);
}
}
// 具体同事类B
class ColleagueB extends Colleague {
public ColleagueB(Mediator mediator) {
super(mediator);
}
@Override
public void sendMessage(String message) {
mediator.sendMessage(message, this);
}
@Override
public void receiveMessage(String message) {
System.out.println("ColleagueB received message: " + message);
}
}
// 测试类
public class MediatorPatternDemo {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ColleagueA colleagueA = new ColleagueA(mediator);
ColleagueB colleagueB = new ColleagueB(mediator);
mediator.setColleagueA(colleagueA);
mediator.setColleagueB(colleagueB);
colleagueA.sendMessage("Hello, colleagueB!");
colleagueB.sendMessage("Hi, colleagueA!");
}
}
在上述示例代码中,中介者模式通过中介者接口和具体中介者类的实现来实现对象之间的通信和协调。抽象同事类定义了同事类的共同行为和对中介者的依赖,具体同事类继承抽象同事类并实现各自的方法。测试类创建了中介者、同事类实例,并通过中介者设置对应的同事类实例,然后调用同事类的方法来发送消息。通过中介者的转发,同事类接收到对方发送的消息并进行处理。