附錄——Java的依賴、關聯、聚合和組合

先扯兩句

一直聽說什麼面相對象的封裝、繼承、多態,說實話,除了從前面試前自己能隨便過兩眼定義,你現在問我這哥幾個都是誰,他們都快認識我了,我還不知道他們都是誰。可讓人鬱悶的是,知識這東西不會等下來,讓你學會這些不會的知識(雖然我也沒學)以後,再出現新的知識點,這不,在看書的過程中,在繼承的基礎上又冒出來什麼叫面相對象設計對象關係的東西,我一個單身汪new了這麼長時間對象了,都沒有找到一個全息3D有觸感的對象,還讓我設計對象關係,還有依賴、關聯、聚合和組合四種之多。

可是想想自己的工資,再向想想自己要找女朋友,之後還要談彩禮,要結婚,要買車
買房,要供孩子上學……只能含着淚看下去啊。

這裏主要是參考的david大偉哥(轉載)依賴、關聯、聚合、組合,大家可以直接去看原版,之所以這裏要重新整理一下,主要是以前蒐藏過一些CSDN的博客,可用時回去再找,竟然發現都被刪除了,而且整理一下也可以強化記憶不是。好了,閒言少敘,下面就是整理的內容。

依賴、關聯、聚合和組合

依賴(Dependence)

假設A類的變化引起了B類的變化,則說名B類依賴於A類。

class Girl {
    public static void feedback(String joke) {
        if (null != joke && joke.length() < 50)
            System.out.println("太好笑了");
        else
            System.out.println("太無聊了");
    }
}

class Boy {
    //使用形參方式發生依賴關係   
    public void tellJokes(Girl girl) {
        girl.feedback("我很帥");
    }

    //使用局部變量發生依賴關係   
    public void tellJokes() {
        Girl girl = new Girl();
        girl.feedback("我很帥");
    }
    //使用靜態變量發生依賴關係   
    public void tellJokes() {
        Girl.feedback("我很帥");
    }
}


PS:別問我爲什麼靜態方法可以通過new出來的對象調用,它確實可以,只是會有警告罷了
在這裏插入圖片描述在這裏插入圖片描述

翻譯過來就是建議我們使用Girl.feedback()的方式調用。

別問我爲什麼“我很帥”滿足妹子好笑的條件,我不會說的!!!
在這裏插入圖片描述

依賴關係需要滿足的三種情況就是:

  1. A類是B類某個方法中的局部變量
  2. A類是B類方法中的一個參數
  3. A類向B類發送消息,從而影響B類發生變化

在這裏插入圖片描述

關聯(Association)

類之間的聯繫。

也就是兩個類之間發生了互動,就可以說是關聯,而關聯關係分爲如下四種:

  • 雙向關聯:A、B兩個類互爲對方的全局變量,並在各自的方法中使用到了對方的類。
  • 單向關聯:A類中使用了B類作爲全局變量,並在A類的方法中使用到了對方的類,但是B中不包含A類
  • 自關聯:在A類中創建一個自身爲對象的類(在線程中傳遞類自身A.this,可以提前封裝一個自身對象A a,在構造方法中賦值a = this,然後在子線程中直接使用這個a即可而不需要每次都是傳A.this)
  • 重數性關聯:表示一個類的對象與另一個類的對象連接的個數(從單向關聯調用了對方類中的一個方法開始,到兩個類相互調用了對方所有方法都複覈重數型關聯)。

舉例子就是,A想抽B一個嘴巴,自己想自己爽卻沒動手的時候就是自關聯。B看A笑得太賤了,忍不住抽了A一嘴巴,A臉上一疼,是B與A的單向關聯;A臉疼的同時,B 手也疼了,是A、B之間的雙向關聯。B雖然手疼,但是抽人的感覺太爽,又忍不住抽A嘴巴抽個不停;A實在忍不了開始還手抽起B嘴巴,兩人一直相互抽到地老天荒。A、B之間開始打到對方開始,一直到最後的任何一個時間節點都是重數性關聯

聚合(Aggregation):表示的是整體和部分的關係,整體與部分 可以分開

  • 聚合關係表示一個整體與部分的關係,通常在定義一個整體類後,再去分析這個整體類的租場結構,從而找出一些成員類,該整體類和成員類之間就形成了聚合關係。
  • 在聚合關係中,成員類是整體類的一部分,即成員對象是整體對象的一部分,但是成員對象可以脫離整體對象獨立存在。

聚合關係可以類比爲一個公司與公司中員工之間的關係,公司就是一個整體類,我們可以以公司的身份去創造價值,但是公司中的每個人又都有着自己技能。

而在項目中,常見於將所有的工具類通過**靜態(static)**的方式封裝在一起,形成一個通用工具類。我們可以使用每個工具類的方法,也可以直接調用通用工具類。

組合(Composition):也是整體與部分的關係,但是整體與部分不可以分開

  • 組合關係表示類之間整體和部分的關係,但是組合關係中部分和整體具有統一的生存期。一旦整體對象不存在,部分對象也將不存在,部分對象與整體對象之 間具有同生共死的關係。
  • 在組合關係中,成員類是整體類的一部分,而且整體類可以控制成員類的生命週期,即成員類的存在依賴於整體類。

組合關係可以類比爲五臟六腑之於人的感覺,哪個零件想出門透透氣咱都不能同意啊,萬一人家曬太陽曬上癮不回來了咋辦。

Ps:《依賴、關聯、聚合、組合》還有泛化關係與實現關係,翻譯過來也就是子類繼承父類和類實現接口,這個就不多加說明了,大家有興趣可以通過上面鏈接瞭解具體情況

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章