中介模式
中介模式属于行为模式。
理解起来很简单,例如公司新接了好几个项目,那如何告诉公司的各位同学要负责项目是哪一个呢呢,不可能一个人一个人的互相转达
这个时候为了统一通知,就采用公司的企业邮箱统一发送放假消息到各个同学的个人企业邮箱来进行通知
这时公司的企业邮箱就充当了一个中介者的角色.
对比两种情况:
- 没有中介者的情况
-
通过公司邮箱终结者
应用场景
- 多个对象之间存在相互通信关系
- 多个对象彼此依赖,后续希望对象彼此之间不再彼此依赖,不再彼此知道,只通过中间件进行
代码示例
(一)抽象的中介者通知
public interface Mediator {
void doSomeThings();
}
(二)抽象的公司同学负责做什么
public abstract class Student {
public Mediator mediator;
public Student(Mediator mediator) {
this.mediator = mediator;
}
public abstract void doSomeThings();
}
(三)具体的同学具体做的事
同学A:
public class StudentA extends Student {
public StudentA(Mediator mediator) {
super(mediator);
}
@Override
public void doSomeThings() {
System.out.print("\n" + "通知:StudenA负责A项目");
}
}
同学B:
public class StudentB extends Student {
public StudentB(Mediator mediator) {
super(mediator);
}
@Override
public void doSomeThings() {
System.out.print("\n" + "通知:StudetB负责B项目");
}
}
(四)具体的中介通知
public class ConcreteMediator implements Mediator {
private StudentA studentA;
private StudentB studentB;
public void setStudentA(StudentA studentA) {
this.studentA = studentA;
}
public void setStudentB(StudentB studentB) {
this.studentB = studentB;
}
@Override
public void doSomeThings() {
studentA.doSomeThings();
studentB.doSomeThings();
}
}
调用方式
ConcreteMediator concreteMediator = new ConcreteMediator();
concreteMediator.setStudentA(new StudentA(concreteMediator));
concreteMediator.setStudentB(new StudentB(concreteMediator));
concreteMediator.doSomeThings();
显示结果
通知:StudenA负责A项目
通知:StudetB负责B项目
总结
- 优点
- 实现中介一对多的关系,让各个对接点职责清晰
- 灵活容易维护扩展,需要添加关系只需要和中介者通信即可
- 缺点
- 如果一个中介者要处理很多关系,类会变得庞大难以维护(其实也可以通过在构建另外一个中介者来维护,算不上多大的缺点)