几天没写设计模式的总结了,工作上要学的事情多,觉得写写挺麻烦。可是这几天下来发现没写总结后,新学的几个模式之间的区别都搞混淆了,看来做学问真的是没有捷径的。写吧!

先来看一个公司的部门关系

怎么样,由于各个部门之间都会有交互,是不是显得逻辑很混乱?可想而知,就算实现了,日后维护也是相当困难的。于是就有了中介者模式:

中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单的说,就是一个星型拓扑图

抽象中介者类:

public abstract class AbstractMediator {
protected Purchase purchase;
protected Sale sale;
protected Stock stock;
//构造函数
public AbstractMediator(){
purchase = new Purchase(this);
sale = new Sale(this);
stock = new Stock(this);
}
//中介者最重要的方法,叫做事件方法,处理多个对象之间的关系
public abstract void execute(String str,Object...objects);
}

抽象同事类:

public abstract class AbstractColleague {
protected AbstractMediator mediator;
public AbstractColleague(AbstractMediator _mediator){
this.mediator = _mediator;
}
}

具体的中介者和具体的同事类就不贴出来了,无非是通过多态调用父类的方法。客户端有必要提一下:

public class Client {
public static void main(String[] args) {
AbstractMediator mediator = new Mediator();
//采购人员采购电脑
System.out.println("------采购人员采购电脑--------");
Purchase purchase = new Purchase(mediator);
purchase.buyIBMcomputer(100);
//销售人员销售电脑
System.out.println("\n------销售人员销售电脑--------");
Sale sale = new Sale(mediator);
sale.sellIBMComputer(1);
//库房管理人员管理库存
System.out.println("\n------库房管理人员清库处理--------");
Stock stock = new Stock(mediator);
stock.clearStock();
}
}

我觉得这里有个比较重要的地方是,需要将中介者注入到每一个具体的同事类中,并且具体的中介者中也有各个同事类的对象,他们是相互关联的。

中介者模式的优点就是减少类间的依赖,把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者,减少了依赖,当然也同时减低了类间的耦合。它的缺点呢就是中介者会膨胀的很大,而且逻辑会很复杂,因为所有的原本N个对象直接的相互依赖关系转换为中介者和同事类的依赖关系,同事类越多,中介者的逻辑就复杂。

一句话概括中介者模式:桥接模式+子类依赖关系!

中介者模式小记【原创】相关推荐

  1. 设计模式(十四)中介者模式

    相关文章 设计模式(一)设计六大原则 设计模式(二)单例模式的七种写法 设计模式(三)建造者模式 设计模式(四)简单工厂模式 设计模式(五)观察者模式 设计模式(六)代理模式 设计模式(七)装饰模式 ...

  2. 设计模式 | 中介者模式(详解)

    中介者模式 案例介绍: 编写信息管理模块: 界面组件之间存在较为复杂的交互关系:如果删除一个客户,要在客户列表(List)中删掉对应的项,客户选择组合框(ComboBox)中客户名称也将减少一个:如果 ...

  3. 设计模式系列 — 中介者模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

  4. php中介模式,中介者模式(Mediator pattern)详解及PHP实现

    中介者模式是一种行为型模式,它包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散偶合.当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可 ...

  5. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  7. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互 ...

  8. 17Mediator(中介者)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Mediator(中介者)模式的动机 在软件构建过程中,经常会出现多个对象互相交互的情况,对象之间常常会维持一种复杂的引用关系.如果遇到一些需 ...

  9. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

    中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...

最新文章

  1. 【HTML5游戏开发】简单的《找不同汉字版》,来考考你的眼力吧
  2. spark RDD底层原理
  3. 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
  4. JavaScript 读取、写入Txt文档
  5. 创业公司产品经理如何画好原型图
  6. 傅立叶变换学习(一)初步认识傅立叶变换
  7. Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间
  8. wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备
  9. 微信小程序点击跳转出现背景
  10. python查看电脑配置_怎么查看电脑配置(教你如何查看电脑配置信息和型号)
  11. 使用母版頁是內容如何使用CSS和javascript
  12. mysql varchar,bigint,char三种类型性能的比较
  13. 学习 | Node.js 之定时任务
  14. javax maven项目缺少_maven冲突解决流程
  15. c语言单元测验答案,c语言试题及答案
  16. 路由器 mac 和 bssid是一个吗
  17. 说说我是如何拿下腾讯offer的
  18. OpenStack使用Placement做资源管理时虚拟机无法调度的一次排错记录
  19. 中国人民解放军郑州计算机学院官网,解放军信息工程大学录取分数线2021
  20. 带你开发一个完整的 node.js 项目

热门文章

  1. [Xcode 实际操作]七、文件与数据-(2)创建文件夹
  2. [Python] Django框架入门
  3. JFreeChart应用实例-折线图
  4. 触发器deleted 表和 inserted 表详解(转)
  5. HTML表格中的nowrap
  6. 把女友升级为老婆的时候发生的BUG
  7. Java指派问题_指派问题的匈牙利算法
  8. mysql中怎么查询单行单列_MySql中的子查询-结果单行单列
  9. 挖掘形态数轴的不确定性
  10. 测量一组平行线的质量和频率m=n+1