uml類(lèi)圖常見(jiàn)關(guān)系
1.泛化關(guān)系
泛化關(guān)系是繼承或?qū)崿F(xiàn)的關(guān)系,是is-a關(guān)系,具體表現(xiàn)為類(lèi)與類(lèi)的繼承,接口與接口的繼承,類(lèi)對(duì)接口的實(shí)現(xiàn)關(guān)系。

2.依賴(lài)關(guān)系
依賴(lài)關(guān)系表示為一個(gè)類(lèi)使用另一個(gè)類(lèi),這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,一個(gè)類(lèi)的變化會(huì)影響到另一個(gè)類(lèi),是use a關(guān)系,如果類(lèi)A依賴(lài)于類(lèi)B,那么類(lèi)B可以是類(lèi)A的局部變量,或類(lèi)A方法的參數(shù),或靜態(tài)方法的調(diào)用。

3.關(guān)聯(lián)關(guān)系
關(guān)聯(lián)關(guān)系是一種強(qiáng)依賴(lài)關(guān)系,這種關(guān)系不存在依賴(lài)關(guān)系的偶然性,關(guān)系也不是臨時(shí)的,是長(zhǎng)期的,穩(wěn)定的。雙方的關(guān)系是平等的,可以單向關(guān)聯(lián)也可以是雙向關(guān)聯(lián)。假如類(lèi)A關(guān)聯(lián)了類(lèi)B,則類(lèi)B是類(lèi)A的全局變量(注意是全局變量,再看看上面的依賴(lài)關(guān)系),大多數(shù)關(guān)聯(lián)都是單向關(guān)聯(lián),這比較容易維護(hù),關(guān)于關(guān)聯(lián),在生活中我們常會(huì)說(shuō),類(lèi)A持有類(lèi)B的引用。

4.聚合關(guān)系
聚合關(guān)系是特殊的關(guān)聯(lián)關(guān)系,是一種強(qiáng)的關(guān)聯(lián)關(guān)系,他體現(xiàn)的是整體與部分關(guān)系,即has-a的關(guān)系,但是整體和部分是可以分離的,注意,是可以分離的。普通關(guān)聯(lián)關(guān)系的兩個(gè)類(lèi)處于同一層次上,是平級(jí)的,而聚合關(guān)系的兩個(gè)類(lèi)處于不同的層次,一個(gè)是整體,一個(gè)是部分。同時(shí),是一種弱的“擁有”關(guān)系。體現(xiàn)的是A對(duì)象可以包含B對(duì)象,但B對(duì)象不是A對(duì)象的組成部分。具體表現(xiàn)為,如果A由B聚合成,表現(xiàn)為A包含有B的全局對(duì)象,但是B對(duì)象可以不在A(yíng)創(chuàng)建的時(shí)刻創(chuàng)建,這句話(huà)非常有意義,它在代碼中通常體現(xiàn)成依賴(lài)注入的setter方法,即A對(duì)象可以隨時(shí)創(chuàng)建B對(duì)象,再想想這不就體現(xiàn)了整體和部分是可以分離了嗎?創(chuàng)建整體的時(shí)候可以不創(chuàng)建部分。

5.組合關(guān)系
組合關(guān)系也是特殊的關(guān)聯(lián)關(guān)系,它體現(xiàn)一種contains a(擁有)關(guān)系,這種關(guān)系是比聚合還要強(qiáng),也稱(chēng)為強(qiáng)聚合。體現(xiàn)了嚴(yán)格的整體和部分關(guān)系,兩者是不可分割的,它們的生命周期是一致的。如果A由B組成,那么A就包含B的全局變量,并在創(chuàng)建A的同時(shí)創(chuàng)建B,在代碼上我們通常是使用構(gòu)造函數(shù)進(jìn)行實(shí)現(xiàn),也是依賴(lài)注入中構(gòu)造函數(shù)的實(shí)現(xiàn)。

最后,我們來(lái)總結(jié)一下,泛化就不用多少了,大家都懂的,就是繼承和實(shí)現(xiàn)接口,重點(diǎn)說(shuō)下其它的吧,依賴(lài),ClassB體現(xiàn)為ClassA的局部變量,我想用就用,用了就有關(guān)系,不用就沒(méi)關(guān)系;關(guān)聯(lián),ClassB體現(xiàn)為ClassA的全局變量,不管你用不用,反正你知道我的存在了,持有了我的引用。聚合,是特殊的關(guān)聯(lián)關(guān)系,用了就加強(qiáng)了關(guān)系,不用還是我只知道你的存在。聚合可以方便的持有多個(gè)類(lèi)的引用,如使用List<>,所以當(dāng)你發(fā)現(xiàn)有List<>等集合是可以使用聚合來(lái)表示,比如觀(guān)察者模式的結(jié)構(gòu)。組合,體現(xiàn)最強(qiáng)的關(guān)系,比如人出身了,必定也有頭部吧,不然我真無(wú)法想象這個(gè)世界了。
相關(guān)文章

網(wǎng)絡(luò)工程師必備的6款配置文件編輯神器:替代Notepad++!
本期文章介紹了六種網(wǎng)工必備工具,這些工具是網(wǎng)絡(luò)工程師日常工作中必不可少的,也是那些立志成為網(wǎng)絡(luò)工程師的人應(yīng)該熟悉的2026-04-13
首個(gè)版本v1.111已上線(xiàn)! VS Code開(kāi)啟周更狂飆模式
026年3月10日,微軟宣布將Visual Studio Code(VS Code)更新節(jié)奏從月更提速至周更,并發(fā)布首個(gè)周更版本v1.1112026-03-11
AI直接調(diào)試瀏覽器! VS Code重大更新發(fā)布
還在手動(dòng)打開(kāi)瀏覽器、點(diǎn)擊按鈕、檢查控制臺(tái)報(bào)錯(cuò)?太累了!現(xiàn)在,最新的VS Code 1.110中AI可以直接調(diào)試瀏覽器2026-03-10
vc 6.0代碼是正確編譯無(wú)法運(yùn)行怎么解決?
今天帶大家來(lái)共同學(xué)習(xí)VC++6.0無(wú)法正常運(yùn)行怎么辦?下面就是詳細(xì)完整的操作步驟,快跟小編一起來(lái)學(xué)習(xí)一下2026-02-27
vscode調(diào)試c代碼始終找不到exe可執(zhí)行文件的詳細(xì)及解決辦法
在 VS Code 中調(diào)試 C++ 項(xiàng)目時(shí),常見(jiàn)報(bào)錯(cuò):“無(wú)法啟動(dòng)調(diào)試會(huì)話(huà):找不到可執(zhí)行文件”,這個(gè)問(wèn)題問(wèn)題通常是由于環(huán)境配置不當(dāng)、缺少編譯步驟、路徑設(shè)置錯(cuò)誤、或是launch.json2026-02-27
vscode入門(mén)! 小白都能看懂的VS Code保姆級(jí)級(jí)使用教程
相對(duì)于其它前端工具來(lái)說(shuō),VSCode顯得更加的流暢,今天就將我的學(xué)習(xí)經(jīng)歷和大家分享一下,希望可以幫助到有需要的人2026-02-27
2026年真正值得裝、用得上、不雞肋的 VSCode 插件,其實(shí)沒(méi)那么多——挑10個(gè)“神級(jí)”不難,但得是每天打開(kāi)就用、關(guān)掉就難受的那種2026-02-10
VS Code 和 VSCodium怎么選? vscode 和 vscodium之間的區(qū)別
咱們今天就來(lái)聊聊 Visual Studio Code (VS Code) 和 VSCodium的相似與區(qū)別,詳細(xì)請(qǐng)看下文介紹2026-01-10
如何啟用.NET Framework3.5? 一鍵安裝net3.5解決軟件依賴(lài)問(wèn)題
你是否曾在安裝某些軟件時(shí)遇到過(guò)“需要.NET Framework 3.5”的提示?實(shí),只需要幾步簡(jiǎn)單的操作,你就可以輕松解決這個(gè)問(wèn)題2025-10-28
VS Code中Java擴(kuò)展代碼重構(gòu)功能的使用詳解
在軟件開(kāi)發(fā)過(guò)程中,重構(gòu)是一個(gè)非常重要的環(huán)節(jié),重構(gòu)可以提高代碼的可讀性、可維護(hù)性和可擴(kuò)展性,使代碼更加健壯和易于理解,本文將介紹如何使用 VSCode 進(jìn)行 Java 代碼重構(gòu)2025-09-20





