日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么叫耦合

發(fā)布時間:2023/12/18 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么叫耦合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

耦合

    • 一、什么是耦合
    • 二、耦合的例子
    • 三、耦合強的壞處
    • 四、代碼例子
    • 五、七種耦合類型
        • 1、內(nèi)容耦合
        • 2、公共耦合
        • 3、外部耦合
        • 4、控制耦合
        • 5、標記耦合
        • 6、數(shù)據(jù)耦合
        • 7、非直接耦合

一、什么是耦合

??耦合表示模塊之間的關聯(lián)程度,分為強耦合和弱耦合。

二、耦合的例子

??例子1:設想一下有十幾個燈泡一同插在燈座上,假如其中有一個燈泡壞掉了,那么需要更換整個燈座設備的話,也就是說十幾個燈泡全都要換掉,那么我們稱這種情況為強耦合。若其中的一個燈泡壞掉了只需將這個壞掉的燈泡更換掉,那么稱這種情況為弱耦合。
??例子2:設想有一個機器人,機器人的眼睛壞掉了,假如需要將整個機器人頭部給換掉,那么這種情況稱為強耦合。若眼睛壞掉了只需更換眼睛,那么則為弱耦合。

三、耦合強的壞處

??從上面的例子我們可以看出,強耦合的系統(tǒng)或者設備,一旦其中的某個零件或者元件壞掉了,我們就要整個設備一齊更換。如此一來,耗時耗力。

四、代碼例子

??假設有A1類、A2類、B類,A1、A2繼承于B:

class B {public void method() { ... } }class A1 extends B {... } class A2 extends B {... }

??原問題:直接調用
??現(xiàn)在寫一個強耦合的情況下的代碼。這種直接調用是強耦合的。
??存在問題:如果你的項目中到處都是new A1(),那么當你想要將A1改為A2的時候,你就需要在項目各個角落找到這個語句并作修改,如果你的項目有上百層結構,那么工作量是巨大的。

B b = new A1(); //若將A1() 改為A2(),在上百層級結構的項目中將會很繁瑣。 b.mehtod();

??改動一:輔助類
??可以改進為松耦合結構,用一個輔助類,通過輔助類調用。
??存在問題:輔助類仍然緊耦合A1類,若要改成A2類還是需要在輔助類里進行小范圍更改(假如輔助類很龐大,改動的地方還是有點多了)。

class B_Helper {B b = new A1();public void useMethod() { b.method();} } B_Helper bHelper = new B_Helper(); //如此一來,若要改動A1(),只需在輔助類這一處改動即可。 bHelper.useMethod();

??通過輔助類我們降低了耦合,我們只需要管理輔助類。在上百層結構的項目中,我們看不到new A1()的語句了,映入眼簾的都是new B_Helper()。如此一來,我們只要改動B_Helper類中的A1類,就可以實現(xiàn)全部的改動。再也不用到處找new A1()啦~
??改動二:spring框架
??轉自下面這個網(wǎng)站,這里還不怎么熟悉,先挖個坑,待功力上升后再來填滿。

https://www.yiibai.com/spring/spring-loosely-coupled-example.html

??可以將輔助類和spring bean配置文件結合,并在spring bean配置文件中聲明所有的Java對象的依賴,然后通過Spring來調用它來實現(xiàn)松耦合。只需要改變 Spring xml 文件使用不同的輸出生成器。只修改 Spring xml文件而不需要無碼修改,這意味著更少的錯誤。

五、七種耦合類型

根據(jù)耦合性從低到高為非直接耦合數(shù)據(jù)耦合標記耦合控制耦合外部耦合公共耦合內(nèi)容耦合

1、內(nèi)容耦合

B模塊直接操縱A模塊的數(shù)據(jù),此時A模塊的數(shù)據(jù)完全依賴于B模塊。

class A {public int numA = 1; } class B {A a = new A();public void method() {a.numA++;} }

2、公共耦合

A、B模塊共同操作C模塊的全局數(shù)據(jù)結構,導致很難確定哪個模塊對C的數(shù)據(jù)進行了操作。

class C {public static int[] arrayC = { 0 }; } class B {public void method() {C.arrayC[0]++; // 這里直接用類名.靜態(tài)變量名調用} } class A {C c = new C();public void method() {C.arrayC[0]++;} }

3、外部耦合

A、B模塊共同操作C模塊的全局簡單變量,導致很難確定哪個模塊對C的數(shù)據(jù)進行了操作。與公共耦合的區(qū)別就是,一個是全局簡單變量,一個是全局數(shù)據(jù)結構。

class C {public static int numC = 0; } class B {public void method() {C.numC++; // 這里直接用類名.靜態(tài)變量名調用} } class A {C c = new C();public void method() {C.numC++;} }

4、控制耦合

A模塊向B模塊傳遞控制信號,B模塊收到控制信號后進行相應的操作。模塊之間傳遞的不是數(shù)據(jù),而是一些標志,開關量等等。

class A {public boolean flagA = true; } class B {public void method(A a) {if (a.flagA) {// ...}} }

5、標記耦合

A模塊傳遞給B模塊某個數(shù)據(jù)結構的地址

public class Main1 {public static void main(String[] args) {A a = new A();B b = new B();b.method(a.map);} } class A {public Map map = new HashMap(); } class B {public void method(Map map) {} }

6、數(shù)據(jù)耦合

模塊之間通過參數(shù)來傳遞數(shù)據(jù)

public class Main1 {public static void main(String[] args) {A a = new A();B b = new B();b.methodB(a.methodA());} } class A {public int methodA() {return 1;} } class B {int numB = 0;public void methodB(int num) {numB = num;} }

7、非直接耦合

兩個模塊之間沒有直接關系,它們之間的聯(lián)系完全是通過主模塊的控制和調用來實現(xiàn)

本文參考自

https://segmentfault.com/a/1190000037599526
https://www.yiibai.com/spring/spring-loosely-coupled-example.html

總結

以上是生活随笔為你收集整理的什么叫耦合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。