设计模式学习笔记--中介者模式Mediator pattern(Java版)
2015-03-05 11:40
931 查看
一、场景
公司里各个部门的总经理
二、实质
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这种对象为“同事对象”。
我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星形结构。
三、示例
运行结果:
跑去接项目!
汇报工作!项目承接的进度,需要资金支持和开发人员!
数钱
专心科研,开发项目!
四、开发场景
MVC模式(C、控制器:就是一个中介者。M和V都和他打交道)。
窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象。
图形界面开发GUI中,对个组件之间的交互,通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象。
Java.lang.reflect.Method#invoke()
公司里各个部门的总经理
二、实质
如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这种对象为“同事对象”。
我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为星形结构。
三、示例
package com.lgd.mediator; //同事类的接口 public interface Department { void selfAction(); //做本部门的事情 void outAction(); //向总经理发出申请 }
package com.lgd.mediator; /** * 市场部 * @author liguodong * */ public class Market implements Department{ private Mediator mediator;//持有中介者(总经理)的引用 public Market(Mediator mediator) { super(); this.mediator = mediator; mediator.register("market", this); } @Override public void selfAction() { // TODO Auto-generated method stub System.out.println("跑去接项目!"); } @Override public void outAction() { // TODO Auto-generated method stub System.out.println("汇报工作!项目承接的进度,需要资金支持!"); mediator.command("finacial"); } }
package com.lgd.mediator; /** * 开发部 * @author liguodong * */ public class Development implements Department{ private Mediator mediator;//持有中介者(总经理)的引用 public Development(Mediator mediator) { super(); this.mediator = mediator; mediator.register("development", this); } @Override public void selfAction() { // TODO Auto-generated method stub System.out.println("专心科研,开发项目!"); } @Override public void outAction() { // TODO Auto-generated method stub System.out.println("汇报工作!没钱了,需要资金支持!"); } }
package com.lgd.mediator; /** * 财务部 * @author liguodong * */ public class Finacial implements Department{ private Mediator mediator;//持有中介者(总经理)的引用 public Finacial(Mediator mediator) { super(); this.mediator = mediator; mediator.register("finacial", this); } @Override public void selfAction() { // TODO Auto-generated method stub System.out.println("数钱"); } @Override public void outAction() { // TODO Auto-generated method stub System.out.println("汇报工作!钱太多了。。"); } }
package com.lgd.mediator; public interface Mediator { void register(String dname,Department d);//登记某部门 void command(String name);//向某部门发出命令 }
package com.lgd.mediator; import java.util.HashMap; import java.util.Map; /** * 总经理 * @author liguodong * */ public class President implements Mediator{ private Map<String, Department> map = new HashMap<String, Department>(); @Override public void register(String dname, Department d) { // TODO Auto-generated method stub map.put(dname,d); } @Override public void command(String dname) { // TODO Auto-generated method stub map.get(dname).selfAction(); } }
package com.lgd.mediator; public class Client { public static void main(String[] args) { Mediator mediator = new President();//总经理 //三个部门同一个总经理 Market market = new Market(mediator); Development development = new Development(mediator); Finacial finacial = new Finacial(mediator); market.selfAction(); market.outAction(); } }
运行结果:
跑去接项目!
汇报工作!项目承接的进度,需要资金支持和开发人员!
数钱
专心科研,开发项目!
四、开发场景
MVC模式(C、控制器:就是一个中介者。M和V都和他打交道)。
窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象。
图形界面开发GUI中,对个组件之间的交互,通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象。
Java.lang.reflect.Method#invoke()
相关文章推荐
- 【设计模式学习笔记十八】【行为模式】【中介者模式(Mediator)】
- 设计模式学习笔记---外观模式Facade pattern(Java版)
- 步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式)
- 步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式)
- JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
- 设计模式学习笔记——中介者(Mediator)模式
- java学习笔记-设计模式23(中介者模式)
- java/android 设计模式学习笔记(18)---中介者模式
- 步步为营 .NET 设计模式学习笔记 二十、Mediator(中介者模式)
- 设计模式学习笔记--命令模式command pattern(Java版)
- 【HeadFirst 设计模式学习笔记】17 中介者(Mediator)模式拾零
- Java设计模式之中介者模式(Mediator Pattern)简介
- 设计模式学习笔记---迭代器模式iterator pattern(Java版)
- Java设计模式十二: 中介者模式(Mediator Pattern)
- Java设计模式十二: 中介者模式(Mediator Pattern)
- HeadFirst 设计模式学习笔记18--中介者(Mediator)模式拾零
- Java设计模式——中介者模式(Mediator Pattern)
- 设计模式笔记21:中介者模式(Mediator Pattern)
- java设计模式---中介者模式(Mediator pattern)
- 设计模式笔记21:中介者模式(Mediator Pattern)