终结者模式的定义: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. 即:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的相互关系。
中介者模式通用类图如下:
从类图中可以看出,终结者模式由以下几个部分组成:
- Mediator 抽象终结者角色。抽象中介者定义同意的接口,用于各同事角色直接通信。
- ConcreteMediator 具体中介者角色。具体中介者角色通过协调各同事角色实现协助行为,因此它必须依赖于各个同事角色。
- Colleague 同事角色。每个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。每个同事类的行为分为两种:一种是自身的行为,这种行为叫做自发方法,与其他同事或中介没有任何依赖;第二种是必须依赖中介者才能完成的行为,叫做依赖方法。
中介者模式的通用代码如下:
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
public abstract void selfMethod();
public abstract void depMethod();
}
public class ConcreteColleague1 extends Colleague{
//通过构造函数传递中介者
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
//自有方法
@Override
public void selfMethod() {
System.out.println("ConcreteColleague1 处理自己的业务逻辑...");
}
//依赖方法
@Override
public void depMethod() {
System.out.println("ConcreteColleague1 委托中介处理业务逻辑...");
super.mediator.doSomething();
}
}
public class ConcreteColleague2 extends Colleague{
//通过构造函数传递中介者
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
//自有方法
@Override
public void selfMethod() {
System.out.println("ConcreteColleague1 处理自己的业务逻辑...");
}
//依赖方法
@Override
public void depMethod() {
System.out.println("ConcreteColleague1 委托中介处理业务逻辑...");
super.mediator.doSomething();
}
}
public abstract class Mediator{
//定义同事类
protected ConcreteColleague1 c1;
protected ConcreteColleague2 c2;
//通过getter/setter方法把同事类注入进来
public ConcreteColleague1 getC1() {
return c1;
}
public void setC1(ConcreteColleague1 c1) {
this.c1 = c1;
}
public ConcreteColleague2 getC2() {
return c2;
}
public void setC2(ConcreteColleague2 c2) {
this.c2 = c2;
}
//中介者模式的业务逻辑
public abstract void doSomething();
}
public class ConcreteMediator extends Mediator{
@Override
public void doSomething() {
super.c1.selfMethod();
super.c2.selfMethod();
}
}
中介者模式的应用
中介者模式的优点
中介者模式的优点就是减少同事类之间的依赖,把原有的一对多的依赖关系变成了一对一的依赖关系。当然,也降低了同事类之间的耦合。
中介者模式的缺点
中介者模式的最大缺点就是中介者逻辑复杂,而且依赖的同事类越多,中介者的逻辑就越复杂。
中介者模式的使用场景
中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构,这种情况下,使用中介者模式有利于把蜘蛛网结构梳理为星形结构。
《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。
网友评论