设计模式之中介者模式
来源:互联网 发布:照相机卡数据视频恢复 编辑:程序博客网 时间:2024/05/19 04:26
1、核心
-如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系及其复杂,这些对象称为“同事对象”
-我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为如下的星形结构
结构图:
2、本质
解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系。
3、应用场景
-MVC模式(其中的C,控制器就是一个中介者对象。M和C都和他打交道)
-窗口游戏程序,窗口软件开发中窗口对象也是一个中介者对象
-图形界面开发GUI中,多个组件之间的交互,可以通过引入一个中介者对象来解决,可以是整体的窗口对象或者DOM对象
-java.lang.reflect.Method#invoke()
4、代码示例
问题:
UML图:
/** * 部门抽象接口 * @author ly1 * */public interface IDepartment { void selfAction(); void outAction();}
/** * 财务部 * @author ly1 * */public class Financial implements IDepartment{ private IMediator mediator; public Financial(IMediator mediator) { super(); this.mediator = mediator; mediator.register("financial", this); } @Override public void selfAction() { System.out.println("数钱!"); } @Override public void outAction() { mediator.comand("financial"); }}
/** * 开发部 * @author ly1 * */public class Development implements IDepartment{ private IMediator mediator; public Development(IMediator mediator) { super(); this.mediator = mediator; mediator.register("development", this); } @Override public void selfAction() { System.out.println("项目开发中!"); } @Override public void outAction() { mediator.comand("financial"); }}
/** * 研发部 * @author ly1 * */public class Research implements IDepartment{ private IMediator mediator; public Research(IMediator mediator) { super(); this.mediator = mediator; mediator.register("research", this); } @Override public void selfAction() { System.out.println("研究中!"); } @Override public void outAction() { mediator.comand("financial"); }}
/** * 中介抽象接口 * @author ly1 * */public interface IMediator { void comand(String comand); void register(String name,IDepartment department);}
import java.util.HashMap;import java.util.Map;/** * 具体中介类:总经理 * @author ly1 * */public class President implements IMediator{ private Map<String,IDepartment> list = new HashMap<String,IDepartment>(); @Override public void comand(String comand) { list.get(comand).selfAction(); } @Override public void register(String name, IDepartment department) { list.put(name, department); }}
/** * 客户端调用 * @author ly1 * */public class Client { public static void main(String[] args) { IMediator mediator = new President(); IDepartment f = new Financial(mediator); IDepartment d = new Development(mediator); IDepartment r = new Research(mediator); d.selfAction(); d.outAction(); }}结果:项目开发中!数钱!
0 0
- 设计模式之中介者
- 设计模式 之 中介者
- 设计模式之中介者
- 设计模式之Mediator中介者模式
- 设计模式之中介者模式
- 设计模式之中介者模式
- 八 设计模式之中介者模式
- 设计模式之--中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之-中介者模式
- 设计模式之中介者模式
- c++设计模式之中介者模式
- 设计模式之中介者模式(Mediator)
- 设计模式之中介者模式
- 设计模式之中介者模式
- JAVA-设计模式之中介者模式
- 大话设计模式之中介者模式
- C++ 知道禁用 copy-ctor/assign operator 是 C++ 程序员的试金石
- ZOJ 3911 线段树 区间更新查找,求素数个数
- 设计模式之-观察者模式
- 图像卷积与滤波的一些知识点
- sql 取表的前10条记录,任意中间几行的记录
- 设计模式之中介者模式
- NYOJ 20 吝啬的国度 (DFS & vector)
- 【SQlite关系型数据库】SQLiteOpenHelper
- 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新……
- 自定义导航控制器,统一设置Push的时候隐藏底部的tabbar
- iOS——个人公司型开发者账号申请流程(含免费邓白氏码申请流程)
- 《王保明老师----Linux开发学习笔记》------讲03:进程 -----fork( )函数 的疑问
- android 代码绘制转盘抽奖的实现
- Ubuntu安装ssh