标签:
定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
类型:行为类模式
类图:
中介者模式的结构
中介者模式又称为调停者模式,从类图中看,共分为3部分:
abstract class AbstractColleague {protected int number;public int getNumber() {return number;}public void setNumber(int number){this.number = number;}//抽象方法,修改数字时同时修改关联对象public abstract void setNumber(int number, AbstractColleague coll);}class ColleagueA extends AbstractColleague{public void setNumber(int number, AbstractColleague coll) {this.number = number;coll.setNumber(number*100);}}class ColleagueB extends AbstractColleague{public void setNumber(int number, AbstractColleague coll) {this.number = number;coll.setNumber(number/100);}}public class Client {public static void main(String[] args){AbstractColleague collA = new ColleagueA();AbstractColleague collB = new ColleagueB();System.out.println("==========设置A影响B==========");collA.setNumber(1288, collB);System.out.println("collA的number值:"+collA.getNumber());System.out.println("collB的number值:"+collB.getNumber());System.out.println("==========设置B影响A==========");collB.setNumber(87635, collA);System.out.println("collB的number值:"+collB.getNumber());System.out.println("collA的number值:"+collA.getNumber());}}
abstract class AbstractColleague {protected int number;public int getNumber() {return number;}public void setNumber(int number){this.number = number;}//注意这里的参数不再是同事类,而是一个中介者public abstract void setNumber(int number, AbstractMediator am);}class ColleagueA extends AbstractColleague{public void setNumber(int number, AbstractMediator am) {this.number = number;am.AaffectB();}}class ColleagueB extends AbstractColleague{@Overridepublic void setNumber(int number, AbstractMediator am) {this.number = number;am.BaffectA();}}abstract class AbstractMediator {protected AbstractColleague A;protected AbstractColleague B;public AbstractMediator(AbstractColleague a, AbstractColleague b) {A = a;B = b;}public abstract void AaffectB();public abstract void BaffectA();}class Mediator extends AbstractMediator {public Mediator(AbstractColleague a, AbstractColleague b) {super(a, b);}//处理A对B的影响public void AaffectB() {int number = A.getNumber();B.setNumber(number*100);}//处理B对A的影响public void BaffectA() {int number = B.getNumber();A.setNumber(number/100);}}public class Client {public static void main(String[] args){AbstractColleague collA = new ColleagueA();AbstractColleague collB = new ColleagueB();AbstractMediator am = new Mediator(collA, collB);System.out.println("==========通过设置A影响B==========");collA.setNumber(1000, am);System.out.println("collA的number值为:"+collA.getNumber());System.out.println("collB的number值为A的10倍:"+collB.getNumber());System.out.println("==========通过设置B影响A==========");collB.setNumber(1000, am);System.out.println("collB的number值为:"+collB.getNumber());System.out.println("collA的number值为B的0.1倍:"+collA.getNumber());}}
标签:
原文地址:http://blog.csdn.net/xiaohangblog/article/details/51242046