中介者模式
2016-01-23 16:10
267 查看
/** * 同事类的接口 * * @author zhangjianbin * */ public interface Department { /** * 做本部门的事 */ void selfAction(); /** * 向总经理发出请求 */ void outAction(); }
/** * 研发部门 * @author zhangjianbin * */ public class Development implements Department { /** * 持有中介者的引用 * 中介者:总经理 */ private Mediator mediator; public Development(Mediator mediator) { super(); this.mediator = mediator; /** * 作用:中介者(总经理)与研发部门相互持有各自的引用,互相可以找的到 */ this.mediator.regiser("development", this); } @Override public void selfAction() { System.err.println("专心开发项目"); } @Override public void outAction() { System.err.println("向总经理汇报工作,没钱了,需要资金支持"); } }
/** * 财报部门 * @author zhangjianbin * */ public class Finacial implements Department { /** * 持有中介者的引用 * 中介者:总经理 */ private Mediator mediator; public Finacial(Mediator mediator) { super(); this.mediator = mediator; /** * 作用:中介者(总经理)与财报部门相互持有各自的引用,互相可以找的到 */ this.mediator.regiser("Finacial", this); } @Override public void selfAction() { System.err.println("数钱"); } @Override public void outAction() { System.err.println("向总经理汇报工作,钱太多了,怎能么花"); } }
/** * 市场部门 * * @author zhangjianbin * */ public class Martket implements Department { /** * 记录市场部要和哪个部门进行沟能,告许经理 */ private String flg; /** * 持有中介者的引用 中介者:总经理 */ private Mediator mediator; public Martket(Mediator mediator) { super(); this.mediator = mediator; /** * 作用:中介者(总经理)与市场部门相互持有各自的引用,互相可以找的到 */ this.mediator.regiser("Martket", this); } @Override public void selfAction() { System.err.println("承接项目"); } @Override public void outAction() { System.err.println("向总经理汇报工作,承接项目的进度"); /** * 对经理说:需要财务部门的支持,这时传入财务部门的标识即可, 然后经理去和财务部门进行沟通 */ mediator.command(flg); } /** * 设置部门的标识 * @param flg */ public void setFlg(String flg) { this.flg = flg; } }
/** * 中介者 * 接口 * @author zhangjianbin * */ public interface Mediator { void regiser(String name,Department d);//同事与总经理相互引用 void command(String name); //中介(总经理)下发的命令 }
/** * 中介者的实现类 总经理 * * @author zhangjianbin * */ public class Persident implements Mediator { /** * 存放相关的同事类 */ private Map<String, Department> map = new HashMap<String, Department>(); @Override public void regiser(String name, Department d) { map.put(name, d); } @Override public void command(String name) { /** * 根据不同的字符处理调用不同的命令 或者 根据不同的内容,总经理执行调用不同的方法 * 例: * 需要找财务部,则传财务部门的标识就可以了,总经理就和财务部门沟通 */ map.get(name).selfAction(); } }
/** * 市场部对象和财务部对象之间实现交互 * 通过经理去沟通 * @param args */ public static void main(String[] args) { /** * 中介者:经理 */ Mediator m = new Persident(); Martket mk = new Martket(m); Development dv = new Development(m); Finacial fn = new Finacial(m); /** * 查看市场部的工作内容 */ mk.selfAction(); /** * 市场部要和财务部门沟能,要钱 */ mk.setFlg("Finacial"); /** * 向经理汇报情况,经理和财务去沟通 */ mk.outAction(); /** 结果: 承接项目 向总经理汇报工作,承接项目的进度 数钱 */ }
相关文章推荐
- Spring-web源码解析之ContentNegotiationStrategy
- Ionic 常见问题及解决方案
- RDDTransformation Ops
- DataShuo大数据时代转挑战为商机
- Java IO流
- word2vec 实践
- 第三章 语句
- 大一下学期的自我目标
- Python学习视频
- 建网站需要学习的软件有哪些
- 令人不得不佩服的微滤技术
- 《转》Vmware vSphere常见问题汇总
- leetcode299. Bulls and Cows
- C++ inline 内联函数
- vector 的基本用法
- Vector容器中存放结构体类型的变量
- Win10 Edge浏览器为什么不能通过应用商店更新?
- Windows客户端访问vsftpd服务器中文乱码问题解决
- 什么是游标
- 1428 - Ping pong