中介者模式:名如其义:其核心设计原则是迪米勒法则;通过中介者降低彼此模型之间的沟通

1产生场景

中介者模式场景介绍:假设有一个进销存模型,进货是根据销售情况决定,同时进货会影响库存;
最开始的流程伪代码涉及如下实体如下
Stock[库存]
Saler[销售]
Buyer[采购]比如销售:
saler.sale(int num){if (!Stock.ok){ // 库存不够Stock.add(Buyer.buySome());}this.saleNum(num);Stock.reduce(num);}这段代码可以看出,销售需要同时和库存和采购打交道;复杂的业务销售需要和更多的领域打交道,不符合迪米勒法则我们通过中介者去将帮助解决领域交互的问题,从而保障业务的干净清晰;
这就是中介者模式的产生场景

如果稍加扩展,业务场景更加复杂

那么引入中介者之后,其模型如下

通过中介者进行交流,每个模型只关注自身的业务,不属于自身的业务丢给中介者,从而降低了耦合度;

2中介者模式的定义

用一个中介对象封装一系列对象的交互,中介者使各对象不需要显示的交互,从而使耦合松散,而且可以独立的改变他们之间的交互;

UML图如下

每一个同事具有两种方法/行为,一为自发行为,二为依赖中介者的中介行为;

中介者
@Data
AbstartMediator{Colleague co1;Colleague co2;public void abstract mediatorMethod();}具体中介者@Data
Mediator{public void mediatorMethod(){co1.do();co2.do();
}}同事Colleague{
AbstartMediator mediator;
Colleague(AbstartMediator abstartMediator){this.mediator= abstartMediator;
}具体同事ColleagueObject1 extends Colleague{void selfMethod(){// 自身行为}void do(){}void depMethod(){// 依赖行为System.out,println("----");mediator.mediatorMethod();}}调用
AbstartMediator mediator = new Mediator();Colleague co1 = new ColleagueObject1 (mediator );
Colleague co2 = new ColleagueObject2 (mediator );
mediator .setCo1(co1);
mediator .setCo1(co2);// 执行依赖方法 以上对依赖类的调用交给中介者
co1.depMethod();

优缺点:

1 将蜘蛛网依赖改造成星形依赖降低依赖复杂度

2 优点降低类之间的依赖,将一对多的依赖改变成1对1 的依赖

1 缺点:中介者自身会随着依赖的复杂而变得复杂,难以维护

适用场景:类与类之间存在依赖本身就是合理,所以中介者模式最适合的是解决复杂的蜘蛛网依赖关系,从而降低耦合

个人感悟:

在一个实际复杂的业务场景中,存在多个依赖类,存在多个依赖流程,实际上可以根据多个业务流程建立多个中介者模式;从而通过多个业务流程建立多个中介者的拆分来降低中介者自身的复杂,保障代码的可读性

设计原则与模式009 中介者模式相关推荐

  1. Java23种设计模式——19.行为型模式之中介者模式

    Java中除去有设计原则之外,还有23中设计模式. 这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题. 并且在这些模式中,可以说是将语言的使用体现的淋 ...

  2. 行为型模式:中介者模式

    LieBrother公众号原文: 行为型模式:中介者模式 十一大行为型模式之二:中介者模式. 简介 姓名 :中介者模式 英文名 :Mediator Pattern 价值观 :让你体验中介是无所不能的存 ...

  3. 行为型模式:中介者模式 1

    前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. LieBrother公众号原文: 行为型模式:中介者模式 十一大行为型模式之二:中介者模式. 简介 姓名 :中介 ...

  4. java mediator模式_中介者模式(Mediator)

    中介者模式 一. 中介者模式 1.1 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使耦合松散,而且可以独立的改变他们之间的交互. 1.2 角色 抽象中介者类(A ...

  5. Java实现二十三种设计模式(五)—— 十一种行为型模式 (中)——解释器模式、迭代器模式、中介者模式、备忘录模式

    Java实现二十三种设计模式(五)-- 十一种行为型模式 (中)--解释器模式.迭代器模式.中介者模式.备忘录模式 一.解释器模式 我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚 ...

  6. java 中介模式_中介者模式

    什么是中介者模式? 在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群.短信平台和房产中介.不论是QQ游戏还是QQ群,它们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他Q ...

  7. 设计模式-行为型模式:中介者模式

    目录 1.简介 2.组成部分 3.优缺点 4.使用场景 5.代码实现 1.简介 中介者模式(Mediator Pattern)是一种行为型设计模式,它通过将对象间的交互行为集中到一个中介对象中,来降低 ...

  8. Java设计模式(访问者模式-迭代器模式-观察者模式-中介者模式)

    Java设计模式Ⅶ 1.访问者模式 1.1 访问者模式概述 1.2 代码理解 2.迭代器模式 2.1 迭代器模式概述 2.2 代码理解 3.观察者模式 3.1 观察者模式概述 3.2 代码理解 4.中 ...

  9. [导入]C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式.zip(8.75 MB)...

    讲座内容: 本培训课程探讨GoF23之 Mediator 中介者模式的意图.动因.原理.应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用. 课程讲师: 李建忠 上海祝成信息科技有限 ...

最新文章

  1. 从零开始成为一名开源程序员,其实只需要九步!
  2. fastreport文本字数太多换行_Flutter实战】文本组件及五大案例
  3. php项目包导入项目,zend studio导入项目文件的图文操作
  4. C# 极限压缩 dotnet core 控制台发布文件
  5. leetcode 78. 子集 思考分析
  6. 【HTML/CSS】浮动模型和清除浮动的方法
  7. 【操作系统】Mac环境配置
  8. html留言板代码_接口测试平台代码实现19.首页优化
  9. hdu 2011 多项式求和 解题报告
  10. 《Java从小白到大牛》之第13章 抽象类与接口
  11. [转]cocos2d-x场景切换时内存过高导致crash解决方法
  12. 第二学期无人机操作师结业复习测试
  13. 【广东大学生网络攻防大赛-WriteUp(非官方)】Reverse | pyre
  14. Mysql修改字段名、修改字段类型
  15. 网络不稳定 网速忽高忽低,ping值忽高忽低的解决办法 无线网出现问题解决
  16. Win11任务栏大小调整
  17. 计算机基础知识考试模拟试题,计算机基础知识选择题考试必备考试真题模拟题...
  18. Git远程分支管理(四)
  19. linux 多播路由查看,Linux下多播路由的实现Windows系统 -电脑资料
  20. CNN实现花卉图片分类识别

热门文章

  1. 纯干货!一款APP从设计稿到切图过程全方位揭秘
  2. 箱线图(Boxplot)
  3. 英文字母的大小写互换,将所有都变成小写,所有都变成大写 位运算实现
  4. wordpress怎么将文章发布在指定页面?
  5. 【面试】上海 java开发工程师/自动化测试开发工程师 面试题
  6. java计算机毕业设计大学生校园兼职系统源码+数据库+系统+lw文档+部署
  7. 学生动物网页设计模板下载 大学生宠物HTML网页制作作品 简单宠物狗网页设计成品 dreamweaver学生网站模板
  8. hive-创建数据库-创建表--hive版本3.1.2
  9. java面试(JVM)
  10. 表单环境外访问Xrm.Page.context对象