/**
* 中介者模式是将相互作用的紧耦合的类通过中介者类管理俩个类的相互作用
* 对俩个本应相互依赖的类解耦合,从而达到松耦合的目的
* 本例中使用俩个相互作用的数类Link作为示例
* LinkA与LinkB的num属性在进行赋值的时候相互影响
* 若使用方法实现相互作用时,俩个类相互依赖,
* 使用中介者设计模式如下例
*
* 创建抽象的中介者类,处理相互作用的LinkA和LinkB
* @author
* @version 0.1
*/
public abstract class Mediator {
protected Link linkA;
protected Link linkB;
public Mediator(Link a,Link b){
linkA = a;
linkB = b;
}
//创建相互影响的方法
public abstract void AaffactB();
public abstract void BaffactA();
}
/**
* 继承抽象的中介者类,重写抽象方法
* @author
* @version 0.1
*/
public class MediatorImpl extends Mediator {
public MediatorImpl(LinkA a,LinkB b){
super(a,b);
}
@Override
public void AaffactB() {
linkB.setNum((int) (linkA.getNum() * 0.1));
}
@Override
public void BaffactA() {
linkA.setNum(linkB.getNum() * 10);
}
}
/**
* @author
* @version 0.1
*/
public abstract class Link {
protected int num;
public abstract void setNum(int num,Mediator mediator);
public void setNum(int num){
this.num = num;
}
public int getNum(){
return num;
}
/**
* @author
* @version 0.1
*/
public class LinkA extends Link {
@Override
public void setNum(int num, Mediator mediator) {
this.num = num;
mediator.AaffactB();
}
}
/**
* @author
* @version 0.1
*/
public class LinkB extends Link {
@Override
public void setNum(int num, Mediator mediator) {
this.num = num;
mediator.BaffactA();
}
}
/**
* @author
* @version 0.1
*/
public class Test {
public static void main(String[] args) {
LinkA a = new LinkA();
LinkB b = new LinkB();
Mediator mediator = new MediatorImpl(a,b);
a.setNum(100,mediator);
System.out.println(a.getNum());
System.out.println(b.getNum());
b.setNum(20,mediator);
System.out.println(a.getNum());
System.out.println(b.getNum());
}
}