一个项目创建很多类是很正常的,类与类之间的相互调用也很正常,久而久之类和类之间就会错综复杂,新来的人看了就会头疼,尤其是老项目,这个时候需要一个门面者,来管理类和类之间的关系,然后提供一个接口,别人调用能拿到结果即可,不用关心类之间的关系。
这个就是门面模式,构建一个类,让个类管理其他所有类之间错综复杂的关系。

比如A类和B类 有时候需求的原因会有A类调用B类的方法,可能下次需求就会有B类引用A类的方法,这就是著名的循环依赖。
这个时候可以构建AB类,引入A类和B类,然后实现业务逻辑,提供给controller类,这样可以永久的避免循环依赖。
controller访问AB类,至于AB类如何实现A和B的交互,controller不用关心,只要调用拿到结果即可。
AB类就相当于一个门面

模块和模块之间或者组件和组件之间相互调用,错综复杂,这个时候可以使用调停者模式,让所有的系统都访问调停者,调停者会处理所有的请求,转发到别的模块或者系统上。
比如之前的公司,有很多服务,A服务依赖B服务,B服务依赖C服务,A也依赖于C服务。有点乱了,这时候,就可以搭建一个D服务,依赖A、B、C服务,所有的请求都到D服务,这样就不会相互依赖了。
消息中间件就是用的这个模式,目的就是解耦。

门面者模式和调停者模式,前者对外而言是门面,后者对内而言就是调停了,两者有异曲同工之妙。

facade 门面模式和mediator 调停者相关推荐

  1. Java 设计模式之Facade门面模式

    场景:当外界某个对象与某个系统内的多个组件都要进行交互时,这个系统可以对外提供一个统一的接口,与外界这个对象对接,这样可以对外隐藏系统内部的复杂性,接口内部调用各个组件功能. 实现:定义一个Facad ...

  2. 6中结构型设计模式的对比理解(Composite组合模式,Proxy代理模式,Flyweight享元模式,Facade门面模式,Bridge桥接模式,Decorator装饰器模式)

    结构型模式 结构型模式用来组装 类和对象,以获得更大的结构. 结构型类模式,通过继承机制来组合接口或类.简单的例子就是多重继承,最后一个类拥有所有父类的性质.这个模式有助于独立开发一个协同类.另一个例 ...

  3. 门面模式、调停者模式、责任链模式

    简介: 1.门面模式(facade) 门面模式:比如政府部门,你需要提交一些资料证明你自己是你自己,可能会从这个部门跑到那个部门,串来串去都办不好,但是如果有一个部门来统一协调这些部门之间的关系,而你 ...

  4. 14Facade(门面)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.接口隔离模式 在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题.甚至根本无法实现.采用添加一层间接(稳定)接口来隔离本来互相紧密关联 ...

  5. Laravel 服务提供者和门面模式

    以 Laravel 自带的文件系统为例,在 config/app.php 的配置文件的 providers 数组中,注册了一个服务提供者: IlluminateFilesystemFilesystem ...

  6. 设计模式-Facade门面-Mediator调停者

    门面模式(对外) 一站式解决方案 一个客户想要去办一件事,结果呢,到了公司之后,要先到财务部,财务部说你需要人事部的申请单,客户去了人事部,人事部说你需要运营部签字,客户又跑去运营部签字-跑来一圈之后 ...

  7. 门面设计模式php,学习php设计模式 php实现门面模式(Facade)

    这篇文章主要介绍了php设计模式中的门面模式,使用php实现门面模式,感兴趣的小伙伴们可以参考一下 一.意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层次的接口,使得子系统 ...

  8. 设计模式之门面模式和调停者模式

    文章目录 前言 一.门面模式Facade 1.定义 2.案例说明 3.代码实现 二.调停者模式Mediator 1.定义 2.案例说明 3.代码实现 总结 前言 本人对于设计模式的学习,仅供参考! 一 ...

  9. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)...

    一,总体概要 1,笔者浅谈 说起"门面"这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, 1 functio ...

最新文章

  1. spring事务提交回滚原理mybatis版
  2. Python time strftime()方法
  3. (二)、WCF通道模型
  4. Lesson2.2 2.3 Maya command reference quick help
  5. Java 如何抛出异常、自定义异常、手动或主动抛出异常
  6. python数据结构5 - 排序与搜索
  7. Jquery Highcharts 选项配置 说明文档
  8. Atitit 初级 中级 高级 软件工程师的区别 非功能性需求 目录 1. 初级 业务功能 1 1.1. 中级 独立完成业务功能 已经非常见api功能 更加广阔 1 2. 高级 非功能性需求
  9. ESP32-S3-WROOM-1-N16R8 配置PSRAM
  10. Anaconda自带python,在cmd中输入python提示不是内部命令或外部命令
  11. Canvas入门教学(3)图片与文字的绘制
  12. 电脑网站如何用支付宝收款(php)
  13. 7款常用的光学字符识别(OCR)软件对比
  14. 安装 FME Desktop 2020 教程(内置补丁可以有效激活软件)
  15. 如何备战 CCNP 考试
  16. 【ATTCK】守株待兔式的水坑攻击
  17. iPhone设备链接Fiddler代理的设置
  18. #论文笔记#【MRM-Lasso:A sparse Multiview Feature Selection Method Via Low-Rank Analysis】论文笔记
  19. 美团内部讲座|北航全权:一种城市空中移动性管理分布式控制框架
  20. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

热门文章

  1. 【玩转CSS】盒子模型
  2. 备战双十一·尖货优品实时选
  3. 超级计算机燕 排名,正文 第一卷 六年之前 HK171 舍弃的超级计算机燕? (485加更)...
  4. galaxy s8 android pc,三星S8/S8+发布!全面屏、智能助理、秒变PC,苹果8已败
  5. win7中如何设置默认打印机
  6. 用Python实现数据筛选与匹配
  7. Frps搭建内网穿透(服务器及客户端详细)
  8. Java 对文件进行重命名操作(rename)
  9. 太实用啦,4种方法教你轻松制作交互式仪表板
  10. Unity3d中UGUI组件精简复盘(十八)Aspect Ratio Fitter组件