来源:http://www.bjsxt.com/ 
一、【GOF23设计模式】_中介者模式、同事协作类、内部类实现

 package com.test.mediator;
/**
* 同事类的接口
*/
public interface Department {
void selfAction();//做本部门的事情
void outAction();//向总经理发出申请
}
 package com.test.mediator;

 public class Development implements Department{
private Mediator m;//持有中介者(总经理)的引用 public Development(Mediator m) {
super();
this.m = m;
m.register("development", this);
} @Override
public void selfAction() {
System.out.println(getClass().getName()+"专心科研,开发项目!");
} @Override
public void outAction() {
System.out.println(getClass().getName()+"汇报工作!没钱了,需要资金支持!");
}
}
 package com.test.mediator;

 public class Finacial implements Department{
private Mediator m;//持有中介者(总经理)的引用 public Finacial(Mediator m) {
super();
this.m = m;
m.register("finacial", this);
} @Override
public void selfAction() {
System.out.println(getClass().getName()+"数钱!");
} @Override
public void outAction() {
System.out.println(getClass().getName()+"汇报工作!没钱了,钱太多了!怎么花?");
}
}
 package com.test.mediator;

 public class Market implements Department{
private Mediator m;//持有中介者(总经理)的引用 public Market(Mediator m) {
super();
this.m = m;
m.register("market", this);
} @Override
public void selfAction() {
System.out.println(getClass().getName()+"跑去接项目!");
} @Override
public void outAction() {
System.out.println(getClass().getName()+"汇报工作!项目承接的进度,需要资金支持!"); m.command("finacial");
}
}
 package com.test.mediator;

 public interface Mediator {
void register(String dname,Department d);
void command(String dname);
}
 package com.test.mediator;

 import java.util.HashMap;
import java.util.Map; public class President implements Mediator{
private Map<String, Department> map = new HashMap<String, Department>(); @Override
public void register(String dname, Department d) {
map.put(dname, d);
} @Override
public void command(String dname) {
map.get(dname).selfAction();
}
}
 package com.test.mediator;

 public class Client {
public static void main(String[] args) {
Mediator m = new President(); Market market = new Market(m);
Development devp = new Development(m);
Finacial f = new Finacial(m); market.selfAction();
market.outAction();
}
}
控制台输出:
com.test.mediator.Market跑去接项目!
com.test.mediator.Market汇报工作!项目承接的进度,需要资金支持!
com.test.mediator.Finacial数钱!

【GOF23设计模式】中介者模式的更多相关文章

  1. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  2. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. GOF23设计模式之代理模式

    GOF23设计模式之代理模式 核心作用:通过代理,控制对对象的访问.可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即:AOP的微观实现) AOP(Asp ...

  4. GOF23设计模式之原型模式

    GOF23设计模式之原型模式 1)通过 new 产生一个对象需要飞船繁琐的数据准备或访问权限,则可以使用原型模式. 2)就算 java 中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具 ...

  5. GOF23设计模式之建造者模式

    GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...

  6. 【GOF23设计模式】工厂模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_简单工厂模式详解.面向对象设计原则.开闭原则.依赖反转原则.迪米特法则  没有工厂模式的情况 package com.te ...

  7. JAVA 设计模式 中介者模式

    用途 中介者模式 (Mediator) 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式是一种行为型模式. 结 ...

  8. 【GOF23设计模式】备忘录模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_备忘录模式.多点备忘.事务操作.回滚数据底层架构 package com.test.memento; /** * 源发器类 ...

  9. 深入浅出设计模式——中介者模式(Mediator Pattern)

    模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...

  10. 设计模式--中介(Mediator)模式

    时隔很长一段时,现在又重温设计模式,上个星期学习<设计模式--代理(Proxy)模式>http://www.cnblogs.com/insus/p/4128814.html. 温故而知新, ...

随机推荐

  1. debian+apache+acme_tiny+lets-encrypt配置笔记

    需要预先将需要申请ssl的域名指向到服务器,此方法完全通过api实现,好处是绿色无污染,不需要注册账号,不会泄露私人信息环境为 debian7+apache apt-get install apach ...

  2. SLAM拾萃(3):siftGPU

    前言 本周博客我们给大家介绍一下SiftGPU.由于特征匹配是SLAM中非常耗时间的一步,许多人都想把它的时间降至最短,因此目前ORB成了非常受欢迎的特征.而老牌SIFT,则一直给人一种“很严谨很精确 ...

  3. c# socket 解决粘包,半包

    处理原理: 半包:即一条消息底层分几次发送,先有个头包读取整条消息的长度,当不满足长度时,将消息临时缓存起来,直到满足长度再解码 粘包:两条完整/不完整消息粘在一起,一般是解码完上一条消息,然后再判断 ...

  4. 固态硬盘寿命实测让你直观SSD寿命!--转

    近年来,高端笔记本及系列上网本越来越多的采用固态硬盘来提升整机性能,尽管众所周知固态硬盘除 了在正常的使用中带来更快速度的体验外,还具有零噪音.不怕震动.低功耗等优点,但大家对固态硬盘的寿命问题的担忧 ...

  5. 二叉查找树(二)之 C++的实现

    概要 上一章介绍了"二叉查找树的相关理论知识,并通过C语言实现了二叉查找树".这一章给出二叉查找树的C++版本.这里不再对树的相关概念进行介绍,若遇到不明白的概念,可以在上一章查找 ...

  6. IOS开发UI基础之UIButton

    什么是按钮?

  7. [Solution] DI原理解析及Castle、Unity框架使用

    本节目录 DI介绍 DI基本原理 DI框架 Castle Windsor Unity Autofac Spring.Net DI介绍 控制反转(Inversion of Control,英文缩写为Io ...

  8. 2015腾讯暑期实习生 Web前端开发 面试经历

    [2015腾讯暑期实习生 Web前端开发 面试经历] 好吧,首先声明,我被刷了,应该是跪在二面 微信查到的面试状态一直呈现复试中 .. 整整四天了.. 看来是没希望了 不过也是一次经历,记录一下还是可 ...

  9. Eclipse颜色主题插件:Eclipse Color Theme

    一个很赞的eclipse插件,可以简单方便地实现eclipse下的代码配色.另外插件作者还专门为此插件做了一个eclipse配色网站,配色多达728个,开发者们也可以在此网站分享自己的配色方案. 插件 ...

  10. 【循序渐进学Python】5.Python常用流程控制及其他语句

    1. 赋值语句常用技巧 通过序列解包(sequence unpacking)可以将多个值的序列解开,让后一一放置到变量的序列中.解包的序列中的元素必须和等号左边变量数量一致.如下: values = ...