通俗理解耦合、解耦-程序员宅基地

技术标签: spring  java  mybatis  软件工程  SSM  

前言:

        大家对解耦这个词一定不会陌生,那么什么是解耦呢?我们又应当如何解耦?

一、耦合

1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。

2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。

3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。

二、解耦 

1、解耦,字面意思就是解除耦合关系。

2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。

3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。

4、观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。

三、如何解耦

1、反射解耦:我们可以利用Java的反射技术,通过类定名,来进行反射创建对象,这个时候我们可以成功的避免编译时异常,并且保证了项目在这个时候还能正常运行。

2、工厂模式解耦:在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。那么,这个读取配置文件,创建和获取三层对象的类就是工厂。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52536274/article/details/130334514

智能推荐

Viper炫彩蛇的下载与安装(MSF图形化界面)_简易极速安装版-程序员宅基地

文章浏览阅读647次,点赞2次,收藏2次。1.更新apt-get2.下载docker.ioY。_炫彩蛇

CVPR2021|| Coordinate Attention注意力机制_位置注意力机制-程序员宅基地

文章浏览阅读2.4w次,点赞63次,收藏418次。Paper:https://arxiv.org/pdf/2103.02907.pdfGitHub:https://github.com/Andrew-Qibin/CoordAttention轻量,优秀,好用!讲之前我们先回顾一下以前的SE与CBAMSESE比较简单,看一下结构图差不多就能理解了,如果有些实现不太懂的,可以借鉴一下CBAM的。但SE只考虑内部通道信息而忽略了位置信息的重要性,而视觉中目标的空间结构是很重要的。CBAM稍微介绍一下CBAM,如图b所示,CBAM包含空间注意力和通_位置注意力机制

eslint搭配prettier使用步骤_plugin:prettier/recommended-程序员宅基地

文章浏览阅读1.2k次。这里的执行逻辑顺序是:eslint会首先读extends的规则,这个时候遇到了最后配置的plugin:prettier/recommended,而这个插件又会先读本地配置的.prettierrc文件再读取prettier自己内部设置的配置,最后读.eslintrc.json的rules配置。2、其次配置.eslintrc.json文件,extends: [“plugin:prettier/recommended”],如果有其他扩展,则"plugin:prettier/recommended"放在最后。_plugin:prettier/recommended

kettle 共享数据库连接时带汉字引发的错误-程序员宅基地

文章浏览阅读548次。处理方式:在目录: C:\Users\Administrator\.kettle 里 找到:shared.xml 把该文件的编码方式改为UTF-8,重启kettle就没问题了

weka up-sampling & down-sampling-程序员宅基地

文章浏览阅读532次。[b]up-sampling:[/b]SMOTE algorithm,over-sampled by creating ``synthetic'' examples rather than by over-sampling with replacement.[b]Weka supervised SMOTE filter [/b]两个参数: [list][*]neares..._weka oversampled

php中如何得到js中的变量,javascript-js变量在PHP中怎么获取该变量?-程序员宅基地

文章浏览阅读1.3k次。在js中定义一个变量,在PHP中怎么获取该变量?(在一个页面)回复内容:在js中定义一个变量,在PHP中怎么获取该变量?(在一个页面)JS是前端,PHP是后端,后端PHP要获取前端JS的变量,那前端JS可以通过AJAX传输数据给后端PHP.比如登录页面login.php:js中通过post提交到后台:var data = {'param' : xxx};$.post(url,data,callba..._php 获取js中变量

随便推点

Qt 中 Q_OBJECT 宏及 moc_*.cpp文件_moc_cpp-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏28次。Qt 中 Q_OBJECT 宏及 moc_前缀文件Q_OBJECT 宏元对象系统 (Meta-Object System)了解 Q_OBJECT 宏展开 Q_OBJECT 宏MOC 预编译器MOC (Meta-Object Compiler)前缀 moc_xx.cpp文件代码示例如下MakeFile文件生成的moc文件如下==moc_whatismoc.cpp== 文件分析片段一结构体`qt_meta_stringdata_WhatIsMoc_t`片段二宏`QT_MOC_LITERAL`和`qt_meta__moc_cpp

WoWoViewPager 炫酷啊!-程序员宅基地

文章浏览阅读1k次。WoWoViewPager WoWo可以优化你的App介绍/引导页面,制作你的App简历。WoWo将动画和viewpager结合起来。当你滑动viewpager的时候,你也在控制动画的当前帧。就好像控制动画时间一般。比如上面的两个Gif,是先向前滑动然后向后滑动。目录English READMEGradle备注Demo版本Todo_wowoviewpager

干货福利:CVPR2016代码合集_yeonwoonya-程序员宅基地

文章浏览阅读4.3k次。DoReFa-Net: Training Low Bitwidth Convolutional Neural Networks with Low Bitwidth Gradients:https://github.com/ppwwyyxx/tensorpack/tree/master/examples/DoReFa-NetCode for Stacked attention network_yeonwoonya

深度优先搜索(DFS)和广度优先搜索(BFS)_深度优先搜索是基于中序遍历吗-程序员宅基地

文章浏览阅读537次。深度优先搜索和广度优先搜索,都是图形搜索算法。一、深度优先搜索(DFS) 深度优先搜素,是针对图和树的遍历算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。 一般会使用栈数据结构来辅助实现DFS算法。 DFS主要思路就是从图中一个未访问的顶点V开始,沿着一条路一直往下走到底,然后从这条路尽头的结点回退到上一个节点,再从另一条路开始走到底.....,不断递归重复..._深度优先搜索是基于中序遍历吗

编译OpenWRT LEDE 固件的一些说明_generic-squashfs-combined-程序员宅基地

文章浏览阅读1.6w次,点赞4次,收藏22次。Github Actions 云编译 OpenWRT LEDE 固件固件文件说明文件共提供多种类型供下载(根据编译时选择的Target Images配置),需要其他类型的请自行转换,下面是部分说明序号名称说明(1)openwrt-x86-64-generic-squashfs-combined.img 或.gz带引导分区文件,也就是刷完后可以直接启动无需做设置,推荐使用!(2)openwrt-x86-64-generic-squashfs-combined.vmdk_generic-squashfs-combined

NOI Online Round 3 PJ 游记_noi online游记3-程序员宅基地

文章浏览阅读257次。博客园同步Day rand()\text{Day rand()}Day rand()报上了名。Day 0\text{Day 0}Day 0期中考试考萎了,彻底萎了,心里什么也不想了。试机?试个啥机?Day 1\text{Day 1}Day 1下午老妈说作业太多,于是我 16:4716:4716:47 匆匆开启了电脑。测试冥间数据,发现 tg180\text{tg} 180tg180 还可以,不错!17:0017:0017:00 开_noi online游记3

推荐文章

热门文章

相关标签