什么叫耦合
耦合
- 一、什么是耦合
- 二、耦合的例子
- 三、耦合強的壞處
- 四、代碼例子
- 五、七種耦合類型
- 1、內容耦合
- 2、公共耦合
- 3、外部耦合
- 4、控制耦合
- 5、標記耦合
- 6、數據耦合
- 7、非直接耦合
一、什么是耦合
??耦合表示模塊之間的關聯程度,分為強耦合和弱耦合。
二、耦合的例子
??例子1:設想一下有十幾個燈泡一同插在燈座上,假如其中有一個燈泡壞掉了,那么需要更換整個燈座設備的話,也就是說十幾個燈泡全都要換掉,那么我們稱這種情況為強耦合。若其中的一個燈泡壞掉了只需將這個壞掉的燈泡更換掉,那么稱這種情況為弱耦合。
??例子2:設想有一個機器人,機器人的眼睛壞掉了,假如需要將整個機器人頭部給換掉,那么這種情況稱為強耦合。若眼睛壞掉了只需更換眼睛,那么則為弱耦合。
三、耦合強的壞處
??從上面的例子我們可以看出,強耦合的系統或者設備,一旦其中的某個零件或者元件壞掉了,我們就要整個設備一齊更換。如此一來,耗時耗力。
四、代碼例子
??假設有A1類、A2類、B類,A1、A2繼承于B:
class B {public void method() { ... } }class A1 extends B {... } class A2 extends B {... }??原問題:直接調用
??現在寫一個強耦合的情況下的代碼。這種直接調用是強耦合的。
??存在問題:如果你的項目中到處都是new A1(),那么當你想要將A1改為A2的時候,你就需要在項目各個角落找到這個語句并作修改,如果你的項目有上百層結構,那么工作量是巨大的。
??改動一:輔助類
??可以改進為松耦合結構,用一個輔助類,通過輔助類調用。
??存在問題:輔助類仍然緊耦合A1類,若要改成A2類還是需要在輔助類里進行小范圍更改(假如輔助類很龐大,改動的地方還是有點多了)。
??通過輔助類我們降低了耦合,我們只需要管理輔助類。在上百層結構的項目中,我們看不到new A1()的語句了,映入眼簾的都是new B_Helper()。如此一來,我們只要改動B_Helper類中的A1類,就可以實現全部的改動。再也不用到處找new A1()啦~
??改動二:spring框架
??轉自下面這個網站,這里還不怎么熟悉,先挖個坑,待功力上升后再來填滿。
https://www.yiibai.com/spring/spring-loosely-coupled-example.html
??可以將輔助類和spring bean配置文件結合,并在spring bean配置文件中聲明所有的Java對象的依賴,然后通過Spring來調用它來實現松耦合。只需要改變 Spring xml 文件使用不同的輸出生成器。只修改 Spring xml文件而不需要無碼修改,這意味著更少的錯誤。
五、七種耦合類型
根據耦合性從低到高為非直接耦合、數據耦合、標記耦合、控制耦合、外部耦合、公共耦合和內容耦合。
1、內容耦合
B模塊直接操縱A模塊的數據,此時A模塊的數據完全依賴于B模塊。
2、公共耦合
A、B模塊共同操作C模塊的全局數據結構,導致很難確定哪個模塊對C的數據進行了操作。
3、外部耦合
A、B模塊共同操作C模塊的全局簡單變量,導致很難確定哪個模塊對C的數據進行了操作。與公共耦合的區別就是,一個是全局簡單變量,一個是全局數據結構。
4、控制耦合
A模塊向B模塊傳遞控制信號,B模塊收到控制信號后進行相應的操作。模塊之間傳遞的不是數據,而是一些標志,開關量等等。
5、標記耦合
A模塊傳遞給B模塊某個數據結構的地址
6、數據耦合
模塊之間通過參數來傳遞數據
7、非直接耦合
兩個模塊之間沒有直接關系,它們之間的聯系完全是通過主模塊的控制和調用來實現
本文參考自
https://segmentfault.com/a/1190000037599526
https://www.yiibai.com/spring/spring-loosely-coupled-example.html
總結
- 上一篇: 计算机网络:广域网的基本概念
- 下一篇: OpenStack网络QoS