文档章节

行为型模式之十:中介者模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:43
字数 263
阅读 13
收藏 0
点赞 0
评论 0

中介者模式是用来协调一组同事,这些同事可能互相不直接交流,而是中介者。 在下面的例子中,Colleague A 想聊天,Colleague 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();
  }
}

在行为模式中,观察者模式最像中介者,你可以在观察者模式中比较两者。

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
小菜学设计模式——设计模式总结之行为型(2)

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more ⋅ 2015/07/10 ⋅ 0

一句话总结23种设计模式则

1. 前言 断断续续写了一段时间的设计模式,终于把经典的23种设计模式全写完了。下面对这些设计模式总结一下。 2. 设计原则 设计原则的介绍 : 设计模式的六大原则 即使我们之前没有专门看过这...

四月葡萄 ⋅ 01/05 ⋅ 0

设计模式之11个行为型模式

行为型模式概述 行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。 行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 通过行为型模式,可...

randy_shandong ⋅ 2017/01/12 ⋅ 0

Java设计模式之-中介者模式(Mediator)

中介者模式,又叫调停者模式。我看的书里面是叫做调停者的,我个人认为没有“中介者”这个名字容易理解。 中介者模式:在一个庞大系统中,多个类之间需要进行信息的交换,从而引发后续的行为...

Mock2052 ⋅ 2017/11/28 ⋅ 0

行为型模式:Mediator 中介者模式

行为型模式:Mediator 中介者模式 1、依赖关系的转化 1)多个对象之间的相互依赖是非常复杂的,这些对像都是两两直接依赖,而用实现细节依赖于抽象的做法对于这种情况已经不够用了,因为这...

flyhighly ⋅ 2011/04/24 ⋅ 0

iOS设计模式——中介者模式

何为中介者模式? 面向对象的设计鼓励把行为分散到不同对象中,这种分散可能导致对象之间的相互关联。在最糟糕的情况下,所有对象都彼此了解并相互操作。 虽然把行为分散到不同对象增强了可复...

国士梅花 ⋅ 2015/09/01 ⋅ 2

设计模式20——Mediator设计模式

Mediator中介者设计模式是通过一个中介对象封装一系列关于对象交互行为. Mediator中介者设计模式中的角色如下: (1).中介者(Mediator):抽象定义了“同事”(colleagues,稍后有定义)们通...

小米米儿小 ⋅ 2014/01/27 ⋅ 0

23种设计模式(7):中介者模式

定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。 类型:行为类模式 类图: 中介者模式的结构 中介者...

LCZ777 ⋅ 2014/07/06 ⋅ 0

小菜学设计模式——中介者模式

背景 最近写博客的时间非常少,天天加班,项目要上线,结果关键时候人都走了,只剩下我一个,说实话,我居然从Linux部署到C++ TCP服务器、到Web服务器、页面编写走通了!!只有移动客户端没有...

learn_more ⋅ 2015/06/27 ⋅ 0

为什么要开始学习设计模式

Q: 为什么想总结一下每一个设计模式: 写了这么久程序了,不同的设计模式也见过不少,有的还比较了解,有的就几乎不认识, 所以一方面出于提高自己的实际能力,另一方面也是为了在提高自己的...

小翼Eric ⋅ 2015/07/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Cube、Cuboid 和 Cube Segment

1.Cube (或Data Cube),即数据立方体,是一种常用于数据分析与索引的技术;它可以对原始数据建立多维度索引。通过 Cube 对数据进行分析,可以大大加快数据的查询效率 2.Cuboid 在 Kylin 中特...

无精疯 ⋅ 18分钟前 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 20分钟前 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 30分钟前 ⋅ 0

云计算的选择悖论如何对待?

人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云计算为...

linux-tao ⋅ 32分钟前 ⋅ 0

我的第一篇个人博客

虽然这是个技术博客,但是,我总是想写一些自己的东西,所有就大胆的在这里写下了第一篇非技术博客。技术博客也很久没有更新,个人原因。 以后自己打算在这里写一些非技术博客,可能个人观点...

Mrs_CoCo ⋅ 33分钟前 ⋅ 0

Redis 注册为 Windows 服务

Redis 注册为 Windows 服务 redis 注册为 windows 服务相关命令 注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 启动服务 re......

Os_yxguang ⋅ 34分钟前 ⋅ 0

世界那么大,语言那么多,为什么选择Micropython,它的优势在哪?

最近国内MicroPython风靡程序界,是什么原因导致它这么火呢?是因为他功能强大,遵循Mit协议开源么? 错!因为使用它真的是太舒服了!!! Micropython的由来,这得益于Damien George这位伟大...

bodasisiter ⋅ 37分钟前 ⋅ 0

docker 清理总结

杀死所有正在运行的容器 docker kill $(docker ps -a -q) 删除所有已经停止的容器(docker rm没有加-f参数,运行中的容器不会删掉) docker rm $(docker ps -a -q) 删除所有未打 dangling 标...

vvx1024 ⋅ 47分钟前 ⋅ 0

关于学习

以前学车的时候,教练说了这样的一句话:如果一个人坐在车上一直学,一直学,反而不如大家轮流着学。因为一个人一直学,就没有给自己留空间来反思和改进。而轮流着学的时候大家下来之后思考上...

mskk ⋅ 51分钟前 ⋅ 0

压缩工具之gzip-bzip2-xz

win下常见压缩工具:rar zip 7z linux下常见压缩工具:zip gz bz2 xz tar.gz tar.bz2 tar.xz gzip 不支持目录压缩 gzip 1.txt #压缩。执行后1.txt消失,生成1.txt.gz压缩文件 gzip -d 1.txt....

ZHENG-JY ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部