您的位置:首页 > 其它

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

2016-10-02 21:38 183 查看
中介者模式作用:

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

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

应用场景:

(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 stub
ca = new ColleagueA();
cb = new ColleagueB();
}

@Override
void notice(String context) {
// TODO Auto-generated method stub
if ("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特工");
}
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: