来源: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. C# WinForm程序打印条码 Code39码1

    做WinForm程序需要打印条码,为了偷懒不想自己写生成条码的程序在网上下载一个标准的39码的字体,在程序里面换上这个条码字体即可打印条码了. 最重要的一点作为记录: 如果想把“123456789”转 ...

  2. WinFrom 登录窗体 密码保存效果

    WinFrom 登录窗体 保存密码效果 开发CS程序的程序员都会遇到 今天突然想把这个功能加到我的项目中 之后总结下 不多说 上图   如果关闭程序 下次在登录的时候 用户名.密码会自动保留下来  一 ...

  3. mac vim 使用

    再使用Mac编辑文件时感觉非常不爽,没有语法高亮,只能通过设置改变所有字体为同一个颜色,看起来还是别扭, 于是找到方法使用vim时可以实现语法高亮显示,操作步骤如下: 1.进入/usr/share/v ...

  4. C++ Copy Elision

    故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...

  5. 强(strong)、软(soft)、弱(weak)、虚(phantom)引用

    https://github.com/Androooid/treasure/blob/master/source/lightsky/posts/mat_usage.md 1.1 GC Root JAV ...

  6. Golang控制goroutine的启动与关闭

    最近在用golang做项目的时候,使用到了goroutine.在golang中启动协程非常方便,只需要加一个go关键字: go myfunc(){ //do something }() 但是对于一些长 ...

  7. 【转】Velocity模板(VM)语言介绍

    http://www.blogjava.net/caizh2009/archive/2010/08/20/329495.html Velocity是什么? Velocity是一个基于java的模板引擎 ...

  8. 微信公众号开发第六课 BAE结合实现迅雷账号随机分享

    迅雷离线是个好东西,那么我们能不能实现这样一个功能,回复迅雷,随机返回一个迅雷账户和密码. 首先在t_type类型表中添加 迅雷以及对应用值xunlei,这样返回的case值中对应值xunlei. 建 ...

  9. Core Animation 学习

    core animation 是在UIKit层之下的一个图形库,用于在iOS 和 OS X 实现动画. Core Animation管理App内容 core animation不是一个完整的绘图系统, ...

  10. js中的包装对象。

    我们都知道在js中普通类型的变量是没有属性和方法的,然后有时却并不是这样. var str = "努力,奋斗"; console.log(str.length); var num ...