预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
中介者模式
中介者模式定义:中介者模式又叫做调停者模式,其定义为:用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。中介者模式的优点:中介者模式的优点是减少了类之间的依赖,使原有一对多的依赖变成了一对一的依赖,同事类只依赖中介者,降低了类之间的耦合。中介者模式的缺点:中介者模式的缺点是中介者会膨胀的很大,而且逻辑复杂,同事类越多,中介者逻辑越复杂。中介者模式的使用场景:中介者模式适合于多个对象之间紧密耦合的情况(类图出现了蜘蛛网结构)。中介者模式的通用类图:Mediator(抽象中介者角色):定义了中介者统一的接口,用于各同事角色直接的通信。ConcreteMediator(具体中介者角色):协调各同事角色实现协作行为,它依赖各个同事角色。Colleague(同事角色):每一个同事角色都知道中介者角色的存在,而且与其他的同事角色通信的时候,一定会通过中介者角色协调。每个同事类的行为分为两种:第一种是同事角色本身的行为,不与其他同事角色或中介者交互的方法,这种方法叫做自发行为(Self-Method);第二种是必须依赖中介者才能完成的行为,叫做依赖方法(Dep-Method)。中介模式通用代码:抽象中介者角色:
publicabstractclassMediator
{
/*中介者依赖各个同事类*/
privateConcreteColleague1colleague1=null;
privateConcreteColleague2colleague2=null;
publicMediator()
{
}
publicConcreteColleague1getColleague1()
{
returncolleague1;
}
publicvoidsetColleague1(ConcreteColleague1colleague1)
{
this.colleague1=colleague1;
}
publicConcreteColleague2getColleague2()
{
returncolleague2;
}
publicvoidsetColleague2(ConcreteColleague2colleague2)
{
this.colleague2=colleague2;
}
/*定义中介者统一接口,用于协调同事角色之间的通信*/
abstractpublicvoiddoSomething1();
abstractpublicvoiddoSomething2();
}
具体中介者角色:
publicclassConcreteMediatorextendsMediator
{
/*中介者对象封装了一系列对象的交互,而且可以独立改变他们之间的交互*/
@Override
publicvoiddoSomething1()
{
super.getColleague1().selfMethod1();
super.getColleague2().selfMethod1();
}
/*中介者对象封装了一系列对象的交互,而且可以独立改变他们之间的交互*/
@Override
publicvoiddoSomething2()
{
super.getColleague1().selfMethod2();
super.getColleague2().selfMethod2();
}
}
同事类:
publicclassConcreteColleague1
{
privateMediatormediator=null;
publicConcreteColleague1(Mediatormediator)
{
this.mediator=mediator;
}
/*自发行为1*/
publicvoidselfMethod1()
{
System.out.println("colleague1selfMethod1invoke!");
}
/*自发行为2*/
publicvoidselfMethod2()
{
System.out.println("colleague1selfMethod2invoke!");
}
/*依赖行为*/
publicvoiddepMethod()
{
this.mediator.doSomething1();
}
}
publicclassConcreteColleague2
{
privateMediatormediator=null;
publicConcreteColleague2(Mediatormediator)
{
this.mediator=mediator;
}
publicvoidselfM