欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

首先看一看書上對這四種關系的定義:

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

——摘自《Java面向對象編程》

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

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

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

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

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

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

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

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

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

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

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

相關文章

  • Java中ArrayList與順序表的概念與使用實例

    Java中ArrayList與順序表的概念與使用實例

    順序表是指用一組地址連續(xù)的存儲單元依次存儲各個元素,使得在邏輯結構上相鄰的數(shù)據(jù)元素存儲在相鄰的物理存儲單元中的線性表,下面這篇文章主要介紹了Java?ArrayList與順序表的相關資料,需要的朋友可以參考下
    2022-01-01
  • Java對象簡單實用案例之計算器實現(xiàn)代碼

    Java對象簡單實用案例之計算器實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Java對象簡單實用案例之計算器實現(xiàn)代碼
    2016-11-11
  • 淺談SpringBoot在使用測試的時候是否需要@RunWith

    淺談SpringBoot在使用測試的時候是否需要@RunWith

    本文主要介紹了淺談SpringBoot在使用測試的時候是否需要@RunWith,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Spring Security獲取用戶認證信息的實現(xiàn)流程

    Spring Security獲取用戶認證信息的實現(xiàn)流程

    Spring Security是一個能夠為基于Spring的企業(yè)應用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,為應用系統(tǒng)提供聲明式的安全訪問控制功能
    2022-12-12
  • Mybatis-plus插入后返回元素id的問題

    Mybatis-plus插入后返回元素id的問題

    這篇文章主要介紹了Mybatis-plus插入后返回元素id的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 向量數(shù)據(jù)庫之如何使用Elasticsearch實現(xiàn)向量數(shù)據(jù)存儲與搜索

    向量數(shù)據(jù)庫之如何使用Elasticsearch實現(xiàn)向量數(shù)據(jù)存儲與搜索

    這篇文章主要介紹了向量數(shù)據(jù)庫之如何使用Elasticsearch實現(xiàn)向量數(shù)據(jù)存儲與搜索,在向量函數(shù)的計算過程中,會對所有匹配的文檔進行線性掃描,因此,查詢預計時間會隨著匹配文檔的數(shù)量線性增長,本文給大家講解的非常詳細,需要的朋友參考下吧
    2023-06-06
  • Java通過SSH連接路由器輸入命令并讀取響應的操作方法

    Java通過SSH連接路由器輸入命令并讀取響應的操作方法

    最近需要讀取和修改華為路由器的配置,使用Java語言開發(fā),通過SSH連接,輸入命令并讀取響應,接下來通過本文給大家介紹下Java通過SSH連接路由器,輸入命令并讀取響應,需要的朋友可以參考下
    2024-01-01
  • JavaWeb實現(xiàn)文件的上傳與下載

    JavaWeb實現(xiàn)文件的上傳與下載

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)文件的上傳與下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • idea插件篇之java內存分析工具(JProfiler)的使用

    idea插件篇之java內存分析工具(JProfiler)的使用

    這篇文章主要介紹了idea插件篇之java內存分析工具(JProfiler),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 淺談一下Java中集合的迭代方式

    淺談一下Java中集合的迭代方式

    這篇文章主要介紹了淺談一下Java中集合的迭代方式,可以幫助我們學習,理解函數(shù)式編程,需要的朋友可以參考下
    2023-04-04

最新評論