作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介者对象来解耦一组对象之间的关系。
中介者模式的核心思想是将对象之间的通信行为集中在一个中介者对象中,而不是让对象直接相互引用,通过这种方式,可以降低对象之间的耦合性,使系统更加灵活和可扩展。
在中介者模式中,中介者对象拥有对一组相关对象的引用,并负责协调和管理它们之间的交互。当一个对象发生变化时,它不需要直接通知其他相关对象,而是将变化信息传递给中介者对象,由中介者对象负责将信息传递给其他相关对象。这样,对象之间的通信变得简单明了,并且不需要了解彼此的细节。
中介者模式适用于多个对象之间存在复杂的交互关系的场景,当对象之间的交互行为变得复杂且难以维护时,可以考虑使用中介者模式来简化系统结构。常见的应用场景包括GUI程序中的窗口管理器、飞机调度系统、聊天室等。
中介者模式的优点包括减少了对象之间的直接依赖,将对象之间的交互行为集中在一个中介者对象中,使系统易于维护和扩展。然而中介者模式也有一些缺点,例如中介者对象可能会变得过于复杂,同时也会增加系统的复杂性。
总之,中介者模式通过引入中介者对象来降低对象之间的耦合性,使系统更加灵活和可扩展,它是一种强大的设计模式,可以用于解决复杂交互关系的问题。
以下是一个简单的 Java 中介者模式的示例代码,请同学们复制到本地执行。
// 中介者接口
interface Mediator {
void sendMessage(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 sendMessage(String message, Colleague colleague) {
if (colleague == colleague1) {
colleague2.receiveMessage(message);
} else if (colleague == colleague2) {
colleague1.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);
}
// 具体同事类1
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);
}
}
// 具体同事类2
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);
}
}
// 示例代码
public class MediatorPatternExample {
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.sendMessage("Hello from Colleague1!");
colleague2.sendMessage("Hi from Colleague2!");
}
}
在这个示例中,Mediator
是中介者接口,ConcreteMediator
是具体中介者实现类。Colleague
是抽象同事类,ConcreteColleague1
和 ConcreteColleague2
是具体同事类。MediatorPatternExample
是示例代码的入口。
通过运行示例代码,ConcreteColleague1
和 ConcreteColleague2
可以通过中介者对象 ConcreteMediator
进行通信。当一个同事对象发送消息时,中介者对象将消息传递给另一个同事对象,实现了对象之间的解耦。
中介者模式适用于以下
种场景,请同学们认真学习。
常见的应用场景包括以下几种,请同学们认真学习。
中介者模式适用于多个对象之间存在复杂交互关系、耦合性高、需要集中管理对象间通信行为、系统中对象的通信行为频繁变化等场景。它能够简化系统结构,降低对象间的耦合性,并提高系统的灵活性和可维护性。
一、什么是中介者模式?它的作用是什么?
中介者模式是一种行为型设计模式,通过引入一个中介者对象来解耦一组对象之间的关系。它的作用是将对象之间的通信行为集中在一个中介者对象中,降低对象之间的耦合性,使系统更加灵活和可扩展。
二、 中介者模式的角色有哪些?
三、在Java中如何实现中介者模式?
四、中介者模式的优点有哪些?
五、中介者模式的缺点有哪些?
六、中介者模式和观察者模式有什么区别?