uml 關聯相關設計模式描述

2021-07-10 07:48:18 字數 2000 閱讀 4545

本篇會講解在uml類圖中,常見幾種關係: 泛化(generalization),依賴(dependency),關聯(association),聚合(aggregation),組合(composition)。

1.泛化關係

泛化關係是繼承或實現的關係,是is a關係,具體表現為類與類的繼承,介面與介面的繼承,類對介面的實現關係。

2.依賴關係

依賴關係表示為乙個類使用另乙個類,這種使用關係是具有偶然性的、臨時性的、非常弱的,乙個類的變化會影響到另乙個類,是use a關係,如果類a依賴於類b,那麼類b可以是類a的區域性變數,或類a方法的引數,或靜態方法的呼叫。

3.關聯關係

關聯關係是一種強依賴關係,這種關係不存在依賴關係的偶然性,關係也不是臨時的,是長期的,穩定的。雙方的關係是平等的,可以單向關聯也可以是雙向關聯。假如類a關聯了類b,則類b是類a的全域性變數(注意是全域性變數,再看看上面的依賴關係),大多數關聯都是單向關聯,這比較容易維護,關於關聯,在生活中我們常會說,類a持有類b的引用。

4.聚合關係

聚合關係是特殊的關聯關係,是一種強的關聯關係,他體現的是整體與部分關係,即has-a的關係,但是整體和部分是可以分離的,注意,是可以分離的。普通關聯關係的兩個類處於同一層次上,是平級的,而聚合關係的兩個類處於不同的層次,乙個是整體,乙個是部分。同時,是一種弱的「擁有」關係。體現的是a物件可以包含b物件,但b物件不是a物件的必要的組成部分。具體表現為,如果a由b聚合成,表現為a包含有b的全域性物件,但是b物件可以不在a建立的時刻建立,這句話非常有意義,它在**中通常體現成依賴注入的setter方法,即a物件可以隨時建立b物件,再想想這不就體現了整體和部分是可以分離了嗎?建立整體的時候可以不建立部分。

5.組合關係

組合關係也是特殊的關聯關係,它體現一種contains a(擁有)關係,這種關係是比聚合還要強,也稱為強聚合。體現了嚴格的整體和部分關係,兩者是不可分割的,它們的生命週期是一致的。如果a由b組成,那麼a就包含b的全域性變數,並在建立a的同時建立b,在**上我們通常是使用建構函式進行實現,也是依賴注入中建構函式的實現。

最後,我們來總結一下,泛化就不用多少了,大家都懂的,就是繼承和實現介面,重點說下其它的吧。

依賴,class a依賴於class b,則class b體現為class a的區域性變數,我想用就用,用了就有關係,不用就沒關係;

關聯,class a關聯了class b,則class b體現為class a的全域性變數,不管你用不用,反正你知道我的存在了,持有了我的引用;

聚合,class a由class b聚合,則class b體現為class a的全域性變數,class b物件的建立是可以不用隨class a物件建立而建立了。用了就加強了關係,不用還是我只知道你的存在。聚合可以方便的持有多個類的引用,如使用list<>,所以當你發現有list<>等集合是可以使用聚合來表示,比如觀察者模式的結構。

組合,class a由class b組成,則class b體現為class a的全域性變數,並在建立class a物件的同時必須建立class bx的物件,體現最強的關係。比如人出身了,必定也有頭部吧,不然我真無法想象這個世界了。

說下最基本的依賴注入方式吧,一種是setter方法或屬性注入,如聚合關係中體現的,使用乙個方法或屬性來完成注入,另一種是建構函式注入,如組合關係中體現的,還有一種是介面注入,通過介面來實現資訊的注入,而其它的類要實現該介面時,就可以實現了注入。以後會在以後詳細講解。

設計模式描述小結

裝飾者 包裝乙個物件,以提供新的行為 狀態 封裝了基於狀態的行為,並使用委託在行為之間切換 迭代器 在物件的集合之間遊走,而不暴露幾個的實現 外觀 簡化一群類的介面 策略 分封裝可以互換的行為,並使用委託來解決要使用哪乙個 包裝物件,以控制對此物件的訪問 工廠方法 由子類決定要建立的具體類是哪乙個 ...

設計模式C 描述

一.定義 介面卡模式將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。adapter 模式的兩種類別 類模式和物件模式。二.舉例說明 實際中,我們為了完成某項工作購買了乙個第三方的庫來加快開發。這個庫可能都是一些.dll檔案,這就帶來了乙個問題!我...

設計模式C 描述

一.概念 單例模式 其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。cpp class csingleton 私有建構函式,防止例項化 private csingleton 私有靜態指標變數,指向類的唯一例項 private static csingleto...