最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別_動力節(jié)點Java學(xué)院整理

 更新時間:2017年08月10日 10:22:38   投稿:mrr  
這篇文章主要介紹了Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別理解,依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,下文給大家介紹的非常詳細,感興趣的朋友一起看看吧

首先看一看書上對這四種關(guān)系的定義:

  • 依賴(Dependency)關(guān)系是類與類之間的聯(lián)接。依賴關(guān)系表示一個類依賴于另一個類的定義。例如,一個人(Person)可以買車(car)和房子(House),Person類依賴于Car類和House類的定義,因為Person類引用了Car和House。與關(guān)聯(lián)不同的是,Person類里并沒有Car和House類型的屬性,Car和House的實例是以參量的方式傳入到buy()方法中去的。一般而言,依賴關(guān)系在Java語言中體現(xiàn)為局域變量、方法的形參,或者對靜態(tài)方法的調(diào)用。
  • 關(guān)聯(lián)(Association)關(guān)系是類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。關(guān)聯(lián)可以是雙向的,也可以是單向的。在Java語言中,關(guān)聯(lián)關(guān)系一般使用成員變量來實現(xiàn)。
  •  聚合(Aggregation) 關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。聚合是整體和個體之間的關(guān)系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關(guān)系便整體和個體的關(guān)系。與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實例變量實現(xiàn)的。但是關(guān)聯(lián)關(guān)系所涉及的兩個類是處在同一層次上的,而在聚合關(guān)系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。
  •  組合(Composition) 關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強的關(guān)系。它要求普通的聚合關(guān)系中代表整體的對象負責(zé)代表部分對象的生命周期,組合關(guān)系是不能共享的。代表整體的對象需要負責(zé)保持部分對象和存活,在一些情況下將負責(zé)代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責(zé)此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發(fā)生組合關(guān)系,由后者排他地負責(zé)生命周期。部分和整體的生命周期一樣。

——摘自《Java面向?qū)ο缶幊獭?/p>

       以上關(guān)系的耦合度依次增強(關(guān)于耦合度的概念將在以后具體討論,這里可以暫時理解為當(dāng)一個類發(fā)生變更時,對其他類造成的影響程度,影響越小則耦合度越弱,影響越大耦合度越強)。由定義我們已經(jīng)知道,依賴關(guān)系實際上是一種比較弱的關(guān)聯(lián),聚合是一種比較強的關(guān)聯(lián),而組合則是一種更強的關(guān)聯(lián),所以籠統(tǒng)的來區(qū)分的話,實際上這四種關(guān)系、都是關(guān)聯(lián)關(guān)系。

        依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,在java中表現(xiàn)為局域變量、方法的形參,或者對靜態(tài)方法的調(diào)用,如下面的例子:Driver類依賴于Car類,Driver的三個方法分別演示了依賴關(guān)系的三種不同形式。

class Car { 
  public static void run(){ 
    System.out.println("汽車在奔跑"); 
  } 
} 
class Driver { 
  //使用形參方式發(fā)生依賴關(guān)系 
  public void drive1(Car car){ 
    car.run(); 
  } 
  //使用局部變量發(fā)生依賴關(guān)系 
  public void drive2(){ 
    Car car = new Car(); 
    car.run(); 
  } 
  //使用靜態(tài)變量發(fā)生依賴關(guān)系 
  public void drive3(){ 
    Car.run(); 
  } 
} 

        關(guān)聯(lián)關(guān)系在java中一般使用成員變量來實現(xiàn),有時也用方法形參的形式實現(xiàn)。依然使用Driver和Car的例子,使用方法參數(shù)形式可以表示依賴關(guān)系,也可以表示關(guān)聯(lián)關(guān)系,畢竟我們無法在程序中太準(zhǔn)確的表達語義。在本例中,使用成員變量表達這個意思:車是我自己的車,我“擁有”這個車。使用方法參數(shù)表達:車不是我的,我只是個司機,別人給我什么車我就開什么車,我使用這個車。

class Driver { 
  //使用成員變量形式實現(xiàn)關(guān)聯(lián) 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
  ... 
  //使用方法參數(shù)形式實現(xiàn)關(guān)聯(lián) 
  public void drive(Car car){ 
    car.run(); 
  } 
} 

        聚合關(guān)系是是一種比較強的關(guān)聯(lián)關(guān)系,java中一般使用成員變量形式實現(xiàn)。對象之間存在著整體與部分的關(guān)系。例如上例中

class Driver { 
  //使用成員變量形式實現(xiàn)聚合關(guān)系 
  Car mycar; 
  public void drive(){ 
    mycar.run(); 
  } 
} 

        假如給上面代碼賦予如下語義:車是一輛私家車,是司機財產(chǎn)的一部分。則相同的代碼即表示聚合關(guān)系了。聚合關(guān)系一般使用setter方法給成員變量賦值。

假如賦予如下語義:車是司機的必須有的財產(chǎn),要想成為一個司機必須要先有輛車,車要是沒了,司機也不想活了。而且司機要是不干司機了,這個車就砸了,別人誰也別想用。那就表示組合關(guān)系了。一般來說,為了表示組合關(guān)系,常常會使用構(gòu)造方法來達到初始化的目的,例如上例中,加上一個以Car為參數(shù)的構(gòu)造方法

public Driver(Car car){ 
  mycar = car; 
}

        所以,關(guān)聯(lián)、聚合、組合只能配合語義,結(jié)合上下文才能夠判斷出來,而只給出一段代碼讓我們判斷是關(guān)聯(lián),聚合,還是組合關(guān)系,則是無法判斷的。

相關(guān)文章

  • Spring Cloud 請求重試機制核心代碼分析

    Spring Cloud 請求重試機制核心代碼分析

    這篇文章主要介紹了Spring Cloud 請求重試機制核心代碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • ZooKeeper入門教程二在單機和集群環(huán)境下的安裝搭建及使用

    ZooKeeper入門教程二在單機和集群環(huán)境下的安裝搭建及使用

    本文是ZooKeeper入門系列教程,涵蓋ZooKeeper的安裝使及單機集群環(huán)境搭建,通過實例和大量圖表,結(jié)合實戰(zhàn),幫助學(xué)習(xí)者理解和運用,有需要的朋友可以借鑒參考下
    2022-01-01
  • Java實現(xiàn)的JSONUtil工具類與用法示例

    Java實現(xiàn)的JSONUtil工具類與用法示例

    這篇文章主要介紹了Java實現(xiàn)的JSONUtil工具類與用法,結(jié)合實例形式分析了Java操作json格式數(shù)據(jù)工具類JSONUtil的定義與簡單使用技巧,需要的朋友可以參考下
    2018-07-07
  • Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時時間配置

    Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時時間配置

    Hutool是一個Java基礎(chǔ)工具類,對文件、流、加密解密、轉(zhuǎn)碼、正則、線程、XML等JDK方法進行封裝,組成各種Util工具類,這篇文章主要給大家介紹了關(guān)于Java?Hutool工具包中HttpUtil的日志統(tǒng)一打印及統(tǒng)一超時時間配置的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Okhttp在SpringBoot中的應(yīng)用實戰(zhàn)記錄(太強了)

    Okhttp在SpringBoot中的應(yīng)用實戰(zhàn)記錄(太強了)

    這篇文章主要給大家介紹了關(guān)于Okhttp在SpringBoot中應(yīng)用實戰(zhàn)的相關(guān)資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請求和處理響應(yīng),OkHttp是一個高效、易用的HTTP客戶端庫,它具有簡潔的API和強大的功能,需要的朋友可以參考下
    2023-12-12
  • java實現(xiàn)快速排序的方法

    java實現(xiàn)快速排序的方法

    這篇文章主要介紹了java實現(xiàn)快速排序的方法,涉及java排序的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 一文帶你搞懂Java類加載機制

    一文帶你搞懂Java類加載機制

    Java?類加載機制是?Java?運行時的核心組成部分,負責(zé)在程序運行過程中動態(tài)加載和連接類文件,并將其轉(zhuǎn)換為可執(zhí)行代碼,接下來小編就來帶大家搞懂面試官老問的?Java?類加載機制,需要的朋友可以參考下
    2023-08-08
  • 解決HttpServletRequest 流數(shù)據(jù)不可重復(fù)讀的操作

    解決HttpServletRequest 流數(shù)據(jù)不可重復(fù)讀的操作

    這篇文章主要介紹了解決HttpServletRequest 流數(shù)據(jù)不可重復(fù)讀的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java8?Stream之groupingBy分組使用解讀

    Java8?Stream之groupingBy分組使用解讀

    這篇文章主要介紹了Java8?Stream之groupingBy分組使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • HDFS中JAVA API的使用

    HDFS中JAVA API的使用

    HDFS是一個分布式文件系統(tǒng),既然是文件系統(tǒng),就可以對其文件進行操作,比如說新建文件、刪除文件、讀取文件內(nèi)容等操作。下面記錄一下使用JAVA API對HDFS中的文件進行操作的過程
    2017-07-07

最新評論

沁源县| 武清区| 特克斯县| 攀枝花市| 闽侯县| 菏泽市| 随州市| 收藏| 秦安县| 绥化市| 丽水市| 上高县| 崇礼县| 永济市| 景东| 阿拉善右旗| 都昌县| 康平县| 锡林浩特市| 乌海市| 海丰县| 白山市| 永年县| 和平县| 商丘市| 敖汉旗| 鄂托克旗| 高密市| 凌源市| 东乌珠穆沁旗| 亚东县| 双辽市| 阿拉善左旗| 平武县| 临武县| 繁昌县| 金华市| 东辽县| 泽库县| 遂昌县| 濮阳县|