设计模式(17)------中介者模式

来源:互联网 发布:男子遭遇网络诈骗 编辑:程序博客网 时间:2024/05/16 08:25

中介者模式作用:

用一个中介对象来封装一系列的对象交互。

中介者使各对象不需要显式的相互引用,从而使其耦合松散,同时,可以独立地改变他们之间的交互。


应用场景:

(1)一组对象以定义良好但是复杂的方式进行通讯,产生的交互对象结构混乱,难以理解。

(2)一个对象引用其他很多对象,并且直接与这些对象通讯,导致对象难以复制。

(3)想要定制一个分部在多个方法中的行为,但是又不想产生太多的子类。


参与对象:

(1)Mediator

中介者定义一个接口用于与各个同事(Colleaguesclass)之间进行通讯。

(2)ConcreteMediator

具体中介者通过协调各同事对象实现协作行为,了解并维护同事对象。

(3)Colleaguesclass

每一个同事类都知道它的中介者对象。

每一个同事对象在需要与它的同事通讯的时候都与它的中介者通讯 。


比如,中介者就好比一个间谍组织,每一个间谍都知道自己隶属于哪个间谍组织(中介者),

如果间谍之间想要通讯联系,需要跟间谍组织(中介者)通讯,由组织安排间谍之间的通讯,

由组织安排他们的刺杀和爆破等任务。

eg:

Mediator

package com.lanhuigu.base.design.behavior.mediator;/** * Mediator: 中介者定义一个接口用于与各个同事(Colleaguesclass)之间进行通讯 */public abstract class Mediator {abstract void notice(String context);}

ConcreteMediator

package com.lanhuigu.base.design.behavior.mediator;/** * ConcreteMediator: 具体中介者通过协调各同事对象实现协作行为,了解并维护同事对象 */public class ConcreteMediator extends Mediator {private ColleagueA ca;private ColleagueB cb;public ConcreteMediator() {// TODO Auto-generated constructor stubca = new ColleagueA();cb = new ColleagueB();}@Overridevoid notice(String context) {// TODO Auto-generated method stubif ("A特工".equals(context)) {ca.action();}if ("B特工".equals(context)) {cb.action();}}}

Colleaguesclass

package com.lanhuigu.base.design.behavior.mediator;public abstract class Colleague {abstract void action();}

package com.lanhuigu.base.design.behavior.mediator;public class ColleagueA extends Colleague{public void action() {System.out.println("A特工,请示工作");}}

package com.lanhuigu.base.design.behavior.mediator;public class ColleagueB extends Colleague{public void action() {System.out.println("B特工,请示组织");}}
Test

package com.lanhuigu.base.design.behavior.mediator;public class Test {public static void main(String[] args) {Mediator md = new ConcreteMediator();// A特工请示md.notice("A特工");// B特工请示md.notice("B特工");}}

运行结果:


0 0