中介者模式定义
Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。)
中介者模式成员
抽象中介者 & 中介者
public abstract class AbstractMediator {
// 定义同事类
Colleague1 colleague1;
Colleague2 colleague2;
// 通过setter方法把同事类注入进来
// 因为中介者类可能只包含部分同时类,所以使用属性注入
public void setColleague1(Colleague1 colleague1) {
this.colleague1 = colleague1;
}
public void setColleague2(Colleague2 colleague2) {
this.colleague2 = colleague2;
}
// 协调完成业务逻辑
public abstract void doSomething();
// 封装同事类私有方法
public void dispatch1() {
this.colleague1.selfMethod();
}
public void dispatch2() {
this.colleague2.selfMethod();
}
}
public class Mediator extends AbstractMediator {
@Override
public void doSomething() {
System.out.println("Mediator.doSomething");
// 调用中介者方法
super.colleague1.selfMethod();
super.colleague2.selfMethod();
}
}
同事类
public class Colleague1 {
private AbstractMediator mediator;
// 通过构造函数传递中介者
Colleague1(AbstractMediator _mediator) {
this.mediator = _mediator;
}
// 自有方法 self-method
public void selfMethod() {
// 处理自己的业务逻辑
System.out.println("Colleague1.selfMethod");
}
// 依赖方法 dep-method
public void depMethod() {
System.out.println("Colleague1.depMethod");
// 调用中介者方法
this.mediator.dispatch2();
}
}
public class Colleague2 {
private AbstractMediator mediator;
// 通过构造函数传递中介者
Colleague2(AbstractMediator _mediator) {
this.mediator = _mediator;
}
// 自有方法 self-method
public void selfMethod() {
// 处理自己的业务逻
System.out.println("Colleague2.selfMethod");
}
// 依赖方法 dep-method
public void depMethod() {
System.out.println("Colleague2.depMethod");
// 委托
this.mediator.dispatch1();
}
}
调用者
public class Client {
public static void main(String[] args) {
AbstractMediator mediator = new Mediator();
Colleague1 colleague1 = new Colleague1(mediator);
Colleague2 colleague2 = new Colleague2(mediator);
mediator.setColleague1(colleague1);
mediator.setColleague2(colleague2);
mediator.doSomething();
System.out.println("colleague1通过中介者调colleague2方法");
colleague1.depMethod();
System.out.println("colleague2通过中介者调colleague1方法");
colleague2.depMethod();
}
}
中介者模式优点
- 减少同事类之间的依赖,每个同事类只依赖中介者
中介者模式缺点
- 中介者会变得很复杂
- 不符合设计原则:依赖倒置原则