[译]Java 设计模式之中介者
(文章翻译自Java Design Pattern: Mediator)
中介者设计模式被用于一组的同事进行协作。这些同事不彼此进行直接的交流联系,但是是通过中介者。
在下面的例子中,A同事想去说话,B同事先去打架。当他们做些事情时候他们调用了中介者的方法去做这些。
中介者模式类图

中介者Java代码
package designpatterns.mediator;
interface IMediator {
public void fight();
public void talk();
public void registerA(ColleagueA a);
public void registerB(ColleagueB a);
}
//concrete mediator
class ConcreteMediator implements IMediator{
ColleagueA talk;
ColleagueB fight;
public void registerA(ColleagueA a){
talk = a;
}
public void registerB(ColleagueB b){
fight = b;
}
public void fight(){
System.out.println("Mediator is fighting");
//let the fight colleague do some stuff
}
public void talk(){
System.out.println("Mediator is talking");
//let the talk colleague do some stuff
}
}
abstract class Colleague {
IMediator mediator;
public abstract void doSomething();
}
//concrete colleague
class ColleagueA extends Colleague {
public ColleagueA(IMediator mediator) {
this.mediator = mediator;
}
@Override
public void doSomething() {
this.mediator.talk();
this.mediator.registerA(this);
}
}
//concrete colleague
class ColleagueB extends Colleague {
public ColleagueB(IMediator mediator) {
this.mediator = mediator;
this.mediator.registerB(this);
}
@Override
public void doSomething() {
this.mediator.fight();
}
}
public class MediatorTest {
public static void main(String[] args) {
IMediator mediator = new ConcreteMediator();
ColleagueA talkColleague = new ColleagueA(mediator);
ColleagueB fightColleague = new ColleagueB(mediator);
talkColleague.doSomething();
fightColleague.doSomething();
}
}
在其他的行为模式中,观察者是和中介者最相似的。你可以读下观察者模式来比较下他们的不同。
[译]Java 设计模式之中介者的更多相关文章
- 折腾Java设计模式之中介者模式
博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并 ...
- 从中国加入WTO来看Java设计模式:中介者模式
目录 应用场景 中介者模式 定义 意图 主要解决问题 何时使用 优缺点 世界贸易组织WTO 应用场景 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象 想通过一个 ...
- [译]Java 设计模式之单例
(文章翻译自Java Design Pattern: Singleton) 单例是在Java最经常被用到的设计模式.它通过阻止其他的实例化和修改来用于控制创建对象的数目.这一特性可应用于那些当只有一个 ...
- [译]Java 设计模式之桥接
(文章翻译自Java Design Pattern: Bridge) 简单来说,桥梁设计模式是一个两层的抽象. 桥接模式就是从一个抽象中实现中解耦以便两个都可以独立的改变.桥接使用封装聚合而且使用继承 ...
- [译]Java 设计模式之装饰器
(文章翻译自Java Design Pattern: Decorator – Decorate your girlfriend) 1.装饰模式的来历 让我们假设你在寻找一个女朋友.有来自像没美国中国日 ...
- [译]Java 设计模式 之模板方法
(文章翻译自Java Design Pattern: Template Method) 模板方法设计模式定义了归档特定操作的工作流.它允许子类去修改特定的步奏而不用改变工作流的结构. 下面的例子表示模 ...
- [译]Java 设计模式之工厂
(文章翻译自Java Design Pattern: Factory) 1.Java工厂模式的来历 工厂设计模式用于创建基于不同参数的对象.下面的例子就是在一个工厂里创建一个人.如果我们向工厂要一个b ...
- [译]Java 设计模式之外观
(文章翻译自Java Design Pattern: Facade) 外观设计模式隐藏了任务的复杂性而只是提供了一个简单的接口.一个非常好的例子就是计算机的启动.当一个计算机启动的时候,它涉及CUP. ...
- [译]Java 设计模式之命令
(文章翻译自Java Design Pattern: Command) 命令设计模式在进行执行和记录的时候需要一个操作及其参数和封装在一个对象里面.在下面的例子中,命令是一个操作,它的参数是一个Com ...
随机推荐
- 博客搬到了http://xianglong.me
自己用Django建立个人博客.这个博客的部分已经迁移到新的个人博客. 博客地址:龙 (http://xianglong.me),欢迎. 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- c# 硬件开源神器netduino的开发中慎用Cpu.Pin
最近为了测试netduino开发板的各个端口是否正常使用,让同事写了一些测试程序,结果出了问题,他的测试程序导致开发板无法发布程序进去,按他的结论是开发板有问题,针对这个情况,我们经过仔细分析代码,认 ...
- remine chart2安装
http://blog.csdn.net/kufeiyun/article/details/9213911
- php形式的内容被处理
/** * 过滤HTML内容RETURN * * @param $string * @param bool $html * * @return array|string */ public stati ...
- BMP文件格式及读写
转 http://blog.csdn.net/pkueecser/article/details/5579604 http://blog.csdn.net/pkueecser/article/deta ...
- Unity3D 如何图形问题修正旋转模型已导入?
如何纠正旋转模型被导入? 一些立体艺术资源包导出其模式,以便 Z 轴向上.Unity 大多数标准的脚本中假定的三维世界 Y 轴代表了.在 Unity 比改动脚本使其契合easy得多. Z 轴朝上 ...
- 微信QQ的二维码登录原理浅析
在非常多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈骗就不说了),二维码验证,多终端辅助授权应用開始多起来,这里先说下啥是二维码,事实上二维码就是存了二进制数据的 ...
- STL 源代码分析 算法 stl_heap.h
本文senlie原版的.转载请保留此地址:http://blog.csdn.net/zhengsenlie heap ----------------------------------------- ...
- FFmpeg 协议初步学习
typedef struct URLContext { const AVClass *av_class; /**< information for av_log(). Set by url_op ...
- 经典算法题每日演练——第十六题 Kruskal算法
原文:经典算法题每日演练--第十六题 Kruskal算法 这篇我们看看第二种生成树的Kruskal算法,这个算法的魅力在于我们可以打一下算法和数据结构的组合拳,很有意思的. 一:思想 若存在M={0, ...