设计模式之中介者模式
来源:互联网 发布:淘宝官方正品女装 编辑:程序博客网 时间:2024/06/06 07:03
(各种设计模式的源代码在 https://github.com/mjnjust/Designmode.git ,使用utf8编码)
一、定义
用一个中介者对象封装一系列的对象交互,使各对象不需要显示的相互作用,从而是耦合松散。
举个例子:战争中十分讲究各个兵种的配合,比如有侦查兵、步兵、炮兵,步兵需要侦查兵去侦查,需要炮兵支援;侦查兵需要确认步兵可以冲锋,炮兵应该轰击;炮兵可以告诉步兵应该冲锋。(只是随便举个例子)可以画个示意图:![这里写图片描述](http://img.blog.csdn.net/20151203104228408)在只有三个兵种的时候似乎示意图还是蛮清楚的,但是真正的战争中怎么可能只有三个兵种或者说三个部队呢?所以聪明的人就想出了指挥部这样的东西,每个兵种或者部队把自己的需求提交给指挥部,然后让指挥部去调度,而自己对指挥部怎么调度完全不用管,这样就可以将本来很繁琐的过程简化。![这里写图片描述](http://img.blog.csdn.net/20151203104327012)
这里的指挥部就是中介者模式中的中介者,当类和类之间的关系出现大量的多对多依赖的时候,就可以考虑用这种模式。
二、实例
以上面步兵侦察兵和炮兵的例子,完成代码。
Soldier的抽象类
public abstract class Soldier { Mediator mediator = null ; public Soldier(Mediator mediator) { this.mediator = mediator ; }}
步兵:
public class FootSoldier extends Soldier{ public FootSoldier(Mediator mediator) { super(mediator); mediator.setFootSoldier(this); } public void work() { System.out.println("步兵冲锋!"); } public void needSpy() { System.out.println("步兵说:需要侦查!"); super.mediator.execute("zhengcha"); } public void needBombard() { System.out.println("步兵说:需要炮击!"); super.mediator.execute("paoji"); }}
侦查兵:
public class SpySoldier extends Soldier{ public SpySoldier(Mediator mediator) { super(mediator); mediator.setSpySoldier(this); } public void work() { System.out.println("侦查兵侦查!"); } public void shouldCharge() { System.out.println("侦查兵说:步兵可以冲锋!"); super.mediator.execute("chongfeng"); } public void shouldBombard() { System.out.println("侦查兵说:炮兵可以炮击!"); super.mediator.execute("paoji"); }}
炮兵:
public class ArtillerySoldier extends Soldier{ public ArtillerySoldier(Mediator mediator) { super(mediator); mediator.setArtillerySoldier(this); } public void work() { System.out.println("炮兵轰击!"); } public void shoudCharge() { System.out.println("炮兵说:步兵可以冲锋!"); super.mediator.execute("chongfeng"); }}
中介者:
public class Mediator { private FootSoldier footSoldier ; private SpySoldier spySoldier ; private ArtillerySoldier artillerySoldier ; public FootSoldier getFootSoldier() { return footSoldier; } public void setFootSoldier(FootSoldier footSoldier) { this.footSoldier = footSoldier; } public SpySoldier getSpySoldier() { return spySoldier; } public void setSpySoldier(SpySoldier spySoldier) { this.spySoldier = spySoldier; } public ArtillerySoldier getArtillerySoldier() { return artillerySoldier; } public void setArtillerySoldier(ArtillerySoldier artillerySoldier) { this.artillerySoldier = artillerySoldier; } public void execute(String code) { if(code.equals("paoji")){ this.artillerySoldier.work(); }else if (code.equals("zhengcha")) { this.spySoldier.work(); }else if (code.equals("chongfeng")) { this.footSoldier.work(); }else { System.out.println("指令错误!"); } }}
测试代码:
Mediator mediator = new Mediator(); FootSoldier footSoldier = new FootSoldier(mediator); ArtillerySoldier artillerySoldier = new ArtillerySoldier(mediator); SpySoldier spySoldier = new SpySoldier(mediator); footSoldier.needSpy(); footSoldier.needBombard(); spySoldier.shouldBombard(); spySoldier.shouldCharge(); artillerySoldier.shoudCharge();
运行结果:
步兵说:需要侦查!侦查兵侦查!步兵说:需要炮击!炮兵轰击!侦查兵说:炮兵可以炮击!炮兵轰击!侦查兵说:步兵可以冲锋!步兵冲锋!炮兵说:步兵可以冲锋!步兵冲锋!
0 0
- 设计模式之中介者
- 设计模式 之 中介者
- 设计模式之中介者
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式
- 设计模式之中介者模式
- 八 设计模式之中介者模式
- 设计模式之--中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之-中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式
- 设计模式之中介者模式
- JAVA-设计模式之中介者模式
- 大话设计模式之中介者模式
- Qt—样式表(setStyleSheet())
- Go语言slice的那些坑
- VS2010统计代码量方法
- gpio_direction_output 与 gpio_set_value
- 69. Php部分常见问题总结
- 设计模式之中介者模式
- 设计模式C++实现:组合模式
- MySQL 大表迁移简单方案
- 项目心得
- IOS系统网易邮箱密码不正确的解决方法
- JVM内存模型和常用配置
- Android View系统解析(上)
- 故障案例:级联主从change master to Could not initialize master info structure
- 托管调试助手“NonComVisibleBaseClass”在“F:\gis\SuperMapGIS\PipGisCS\bin\x86\Debug\PipGisCS.vshost.exe”中检测到问题