推荐答案
中介者模式(Mediator Pattern)是一种行为设计模式,它通过定义一个中介对象来封装一系列对象之间的交互。中介者模式使得对象之间不需要显式地相互引用,从而使其耦合松散,并且可以独立地改变它们之间的交互。
在Java中,中介者模式通常用于减少多个对象或类之间的通信复杂性。通过引入一个中介者,系统中的各个对象不再直接相互通信,而是通过中介者进行通信,从而降低了系统的耦合度。
本题详细解读
中介者模式的结构
中介者模式通常包含以下几个角色:
- Mediator(中介者接口):定义了各个同事对象之间通信的接口。
- ConcreteMediator(具体中介者):实现中介者接口,协调各个同事对象之间的交互。它知道所有的同事对象,并且负责维护它们之间的引用。
- Colleague(同事类):每个同事对象都知道它的中介者对象。同事对象之间不直接通信,而是通过中介者进行通信。
中介者模式的优点
- 降低耦合度:中介者模式通过将对象之间的交互集中在中介者中,减少了对象之间的直接依赖,从而降低了系统的耦合度。
- 简化对象之间的交互:通过中介者,对象之间的交互变得更加简单和清晰,避免了复杂的网状结构。
- 集中控制:中介者模式将交互逻辑集中在中介者中,使得系统更容易维护和扩展。
中介者模式的缺点
- 中介者可能变得复杂:如果系统中对象之间的交互非常复杂,中介者可能会变得非常庞大和难以维护。
- 性能问题:由于所有的交互都通过中介者进行,可能会导致中介者成为系统的性能瓶颈。
示例代码
// www.javascriptcn.com code example
// 中介者接口
interface Mediator {
void send(String message, Colleague colleague);
}
// 具体中介者
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 send(String message, Colleague colleague) {
if (colleague == colleague1) {
colleague2.receive(message);
} else {
colleague1.receive(message);
}
}
}
// 同事类
abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// 具体同事类
class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
mediator.send(message, this);
}
@Override
public void receive(String message) {
System.out.println("Colleague1 received: " + message);
}
}
class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
mediator.send(message, this);
}
@Override
public void receive(String message) {
System.out.println("Colleague2 received: " + message);
}
}
// 客户端代码
public class MediatorPatternDemo {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2);
colleague1.send("Hello from Colleague1");
colleague2.send("Hi from Colleague2");
}
}代码解释
- Mediator接口:定义了
send方法,用于同事类之间的通信。 - ConcreteMediator类:实现了
Mediator接口,负责协调Colleague1和Colleague2之间的通信。 - Colleague抽象类:所有同事类的基类,包含一个
Mediator对象的引用。 - ConcreteColleague1和ConcreteColleague2类:具体的同事类,通过中介者发送和接收消息。
通过这个示例,我们可以看到中介者模式如何简化对象之间的交互,并且使得系统更加易于维护和扩展。