中介模式如何优化Java代码,适用于什么样的场景?以及它的Java实现是怎样的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
中介模式(Mediator Pattern)是一种行为设计模式,它通过提供一个中介类来封装一系列对象之间的交互,使这些对象不必相互引用,从而降低它们之间的耦合度。这种模式适用于那些对象之间存在复杂的网状结构,直接通信会导致高耦合和难以维护的场景,比如用户界面组件、模块间的协调工作等。
下面是一个简单的Java实现示例,展示如何应用中介模式来简化用户界面组件之间的通信:
// 中介接口
interface Mediator {
void sendMessage(String message, Colleague colleague);
}
// 具体中介者
class ConcreteMediator implements Mediator {
private Colleague colleague1;
private Colleague colleague2;
public void setColleague1(Colleague colleague) {
this.colleague1 = colleague;
}
public void setColleague2(Colleague colleague) {
this.colleague2 = colleague;
}
@Override
public void sendMessage(String message, Colleague colleague) {
if (colleague == colleague1) {
colleague2.receiveMessage(message);
} else {
colleague1.receiveMessage(message);
}
}
}
// 同事抽象类
abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
this.mediator = mediator;
}
abstract void receiveMessage(String message);
}
// 具体同事类1
class ConcreteColleague1 extends Colleague {
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
@Override
void receiveMessage(String message) {
System.out.println("ConcreteColleague1 received: " + message);
}
void sendMessage(String message) {
mediator.sendMessage(message, this);
}
}
// 具体同事类2
class ConcreteColleague2 extends Colleague {
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
@Override
void receiveMessage(String message) {
System.out.println("ConcreteColleague2 received: " + message);
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1(mediator);
Colleague colleague2 = new ConcreteColleague2(mediator);
mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2);
colleague1.sendMessage("Hello, Colleague2!");
colleague2.sendMessage("Hi, Colleague1!");
}
}
在这个例子中,ConcreteColleague1
和 ConcreteColleague2
是两个需要互相通信的对象,但它们并不直接调用对方的方法,而是通过 ConcreteMediator
这个中介者来进行消息传递,这样就降低了它们之间的耦合度。