中介者模式:使用一个中介对象封装对象与其他对象之间的操作行为,使得原本产生交叉蜘蛛网状的对象关系变成星型关系
优点:降低对象与对象之间的耦合,满足迪米特法则
标准类图:
抽象中介者:
public abstract class Mediator {
protected ConcreteColleague1 concreteColleague1;
protected ConcreteColleague2 concreteColleague2;
public ConcreteColleague1 getConcreteColleague1() {
return concreteColleague1;
}
public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
this.concreteColleague1 = concreteColleague1;
}
public ConcreteColleague2 getConcreteColleague2() {
return concreteColleague2;
}
public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
this.concreteColleague2 = concreteColleague2;
}
public abstract void doSomething1();
public abstract void doSomething2();
}
具体中介者:
public class ConcreteMediator extends Mediator{
@Override
public void doSomething1() {
super.concreteColleague1.doSomething1();
}
@Override
public void doSomething2() {
super.concreteColleague2.doSomething2();
}
}
抽象同事类:
public abstract class Colleague {
protected Mediator mediator;
public Colleague(Mediator mediator) {
super();
this.mediator = mediator;
}
}
具体同事类:
public class ConcreteColleague1 extends Colleague{
public ConcreteColleague1(Mediator mediator) {
super(mediator);
}
public void doSomething1(){
System.out.println("do some thing 1");
}
public void doSomething2(){
super.mediator.doSomething2();
}
}
public class ConcreteColleague2 extends Colleague{
public ConcreteColleague2(Mediator mediator) {
super(mediator);
}
public void doSomething2(){
System.out.println("do some thing 2");
}
public void doSomething1(){
super.mediator.doSomething1();
}
}
场景类:
public class Client {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
ConcreteColleague1 colleague1 = new ConcreteColleague1(mediator);
ConcreteColleague2 colleague2 = new ConcreteColleague2(mediator);
mediator.setConcreteColleague1(colleague1);
mediator.setConcreteColleague2(colleague2);
colleague1.doSomething2();
colleague2.doSomething1();
}
}