设计模式(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 class Test {
public static void main(String[] args) {
Mediator md = new ConcreteMediator();
// A特工请示
md.notice("A特工");
// B特工请示
md.notice("B特工");
}
}
运行结果:
用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显式的相互引用,从而使其耦合松散,同时,可以独立地改变他们之间的交互。
应用场景:
(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特工");
}
}
运行结果:
相关文章推荐
- 设计模式(17)---->中介者模式
- 设计模式(17)-中介者模式
- 设计模式(17)--中介者模式
- 【设计模式】17、中介者模式
- 设计模式系列课程17之【观察者模式】
- 设计模式笔记(17)---中介者模式(行为型)
- 设计模式(17)-行为型-中介者模式(Mediator)
- 设计模式C++实现(13)——中介者模式
- 《Android源码设计模式》读书笔记 (17) 第17章 中介者模式
- 设计模式(16)——中介者模式
- 设计模式C++实现(13)——中介者模式
- 设计模式C++实现(13)——中介者模式(Mediator)
- C#面向对象设计模式纵横谈 学习笔记17 Mediator 中介者模式(行为型模式)
- 设计模式(中介者模式)
- 17、C语言和设计模式(中介者模式)
- 设计模式17——Observer设计模式
- 设计模式笔记(17)---中介者模式(行为型)
- 设计模式笔记(17)---中介者模式(行为型)
- 设计模式(二十二)—中介者模式(行为型)
- [设计模式] 17 中介者模式 Mediator Pattern