中介者模式(Mediator Pattern)是一种行为型设计模式,也叫作调停者模式,它通过减少对象之间的直接通信来减少对象之间的耦合。在中介者模式中,所有对象的交互都是通过一个中介者对象来完成的,而不是直接进行交互。这个中介者对象负责协调不同对象之间的交互,从而降低了对象之间的耦合度,同时也使得对象之间的通信更加统一和简化。
中介者模式的主要角色包括:
- 中介者(Mediator):负责协调各个同事对象之间的交互,通常包括一个或多个接口,用于让各个同事对象之间进行通信。
- 同事对象(Colleague):它是中介者模式中的参与者,它们之间通过中介者来通信,但是其本身并不知道中介者的具体实现。
中介者模式的使用场景包括:当一个系统中对象之间的交互关系变得复杂并开始产生耦合时,可以使用中介者模式。例如,一个公司的员工之间可能需要相互交流联系,而员工之间的关系可能非常复杂。这时,可以引入一个中介者,如公司的内部邮件系统,来协调员工之间的交互,降低对象之间的耦合度。
下面是一个使用Java实现中介者模式的示例:
// 中介者接口,用于定义各个同事对象之间的消息传递方法
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// 具体中介者,实现各个同事对象之间的消息传递方法
class ConcreteMediator implements Mediator {
private List<Colleague> colleagues;
public ConcreteMediator() {
colleagues = new ArrayList<Colleague>();
}
public void addColleague(Colleague colleague) {
colleagues.add(colleague);
}
@Override
public void sendMessage(String message, Colleague colleague) {
for (Colleague c : colleagues) {
if (c != colleague) {
c.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);
}
// 具体同事类,实现各个同事对象的具体行为
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);
}
}
// 具体同事类,实现各个同事对象的具体行为
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);
}
}
// 使用示例
public class MediatorPatternExample {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
Colleague c1 = new ConcreteColleague1(mediator);
Colleague c2 = new ConcreteColleague2(mediator);
mediator.addColleague(c1);
mediator.addColleague(c2);
c1.sendMessage("Hello, ConcreteColleague2!");
c2.sendMessage("Hello, ConcreteColleague1!");
}
}
在这个示例中,Mediator接口表示中介者,用于定义各个同事对象之间的消息传递方法。ConcreteMediator是具体中介者类,实现各个同事对象之间的消息传