摘要:因為依賴關系不強制,所以用虛線表示關聯關系關聯關系是類屬性依賴,很關鍵,所以使用實線表示。源碼地址類圖參考慕課網設計模式精講大話設計模式設計模式之類圖學習二類圖
類圖(Class diagram)主要用于描述系統的結構化設計。類圖也是最常用的UML圖,用類圖可以顯示出類、接口以及它們之間的靜態結構和關系。0x01.類圖中的元素 1.類 Class / 接口 Interface
第一格:表示類的名字,抽象類用斜體表示,接口在前面加
第二格:表示類的屬性,前面符號表示作用于,冒號后面表示類的類型
符號 | 解釋 |
---|---|
+ | public |
- | private |
# | protected |
~ | default |
下面有橫線 | 表示static靜態屬性 |
第三格:表示類的行為,同上
符號 | 解釋 |
---|---|
+-#~ | 同上 |
斜體 | 抽象方法 |
下面有橫線 | 表示static靜態方法 |
:String | :后表示返回值,返回String字符串類型 |
無: | 表示void無返回 |
依賴關系的定義為:對于兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,這兩個對象之間主要體現為依賴關系。
可以簡單的理解為:類 A 使用到了類 B,而這種使用關系具有偶然性,臨時性,非常弱的,但是 B 類中的變化會影響到類 A,比如某個學生要用筆寫字,學生與筆的關系就是一種依賴關系,如果筆沒水了,那學生就不能寫字了(B 類的變化會影響類 A) 或者換另一只筆繼續寫字(臨時性體現)。
使用虛線和箭頭,箭頭指向被依賴的對象
UML圖示
例如上面圖中:動物的新陳代謝依賴氧氣和水
/** * 動物類 */ public class Animal { /** * 生命 */ public String life; /** * 新陳代謝 * @param oxygen 氧氣 * @param water 水 */ public void metabolism(Oxygen oxygen, Water water) { } public void multiply () { } }
/** * 水 */ public class Water {} /** * 氧氣 */ public class Oxygen {}b).泛化繼承關系
繼承表示類與類 (或者接口與接口) 之間的父子關系。在 Java 中,用關鍵字 extends 表示繼承關系。
空心箭頭實線,箭頭方向是子類指向父類來表示,只有知道對方信息才能指向對方
UML圖示
如圖所示:鳥類屬于動物類(鳥是動物),所以鳥繼承自動物。繼承了動物的新陳代謝和繁衍,同時也有自己的屬性(翅膀)、行為(生蛋)。
public class Animal { /** * 生命 */ public String life; /** * 新陳代謝 * @param oxygen 氧氣 * @param water 水 */ public void metabolism(Oxygen oxygen, Water water) { } public void multiply () { } }
/** * 鳥 */ public class Bird extends Animal { /** * 羽毛 */ public String plume; /** * 兩個翅膀 */ public Listc).組合關系wings; /** * 生蛋 */ public void rawEgg () { } }
組合是一種耦合度更強的關聯關系。存在組合關系的類表示“整體-部分”的關聯關系,“整體”負責“部分”的生命周期,他們之間是共生共死的;并且“部分”多帶帶存在時沒有任何意義。
使用實心菱形和大于箭頭表示,實線說明耦合性更強。組合關系可以在兩側寫上數字,表示數量對應關系。組合關系對象擁有同樣的生命周期。
UML圖示
如圖所示:一只鳥有兩個翅膀,失去了鳥,翅膀也沒有存在的意義,所以鳥和翅膀是共同的生命周期。
/** * 鳥 */ public class Bird extends Animal { /** * 羽毛 */ public String plume; /** * 兩個翅膀 */ public Listwings; /** * 生蛋 */ public void rawEgg () { } }
/** * 翅膀 */ public class Wing {}d).關聯關系
關聯關系的定義為:對于兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關系時,這兩個對象之間為關聯關系。
它體現的兩個類中一種強依賴關系,比如我和我的朋友,這種關系比依賴更強,不存在依賴關系中的偶然性,關系也不是臨時的,一般是長期性的。
關聯關系分為單向關聯和雙向關聯:
在 Java 中,單向關聯表現為:類 A 當中使用了 類 B,其中類 B 是作為類 A 的成員變量。
雙向關聯表現為: 類 A 當中使用類 B 作為成員變量,同時類 B 中也使用了類 A 作為成員變量。
表示一個類和另外一個類是有關聯的,一般有一個屬性是另一個類,用實線和大于箭頭,指向被關聯對象,使用實線說明依賴性比較強。
UML圖示
如圖所示:企鵝的生存依賴氣候的變化。
/** * 企鵝 */ public class Penguin extends Bird { //氣候 public Climate climate; public Climate getClimate() { return climate; } public void setClimate(Climate climate) { this.climate = climate; } }
/** * 氣候 */ public class Climate {}e).聚合關系
聚合關系是關聯關系的一種,耦合度強于關聯,他們的代碼表現是相同的,僅僅是在語義上有所區別:關聯關系的對象間是相互獨立的,而聚合關系的對象之間存在著包容關系,他們之間是“整體-個體”的相互關系。
整體和局部的關系,兩者擁有獨立的生命周期,是has-a的關系。
聚合關系中作為成員變量的類一般使用 set 方法賦值。
使用空心菱形和大于箭頭表示,菱形指向聚合方,箭頭指向個體。空心菱形是可以放東西的盤子,可以用來裝東西,東西放在盤子里就可以裝進去。
UML類圖表示
如圖所示:大雁群中有很多只大雁,大眼群有獨立的行為(一字飛行,V字飛行)
/** * 大雁群 */ public class BigWildGooseGroup { public ListbigWildGooses; public void oneFly() { System.out.println("一字飛行"); } public void vfly() { System.out.println("V字飛行"); } public List getBigWildGooses() { return bigWildGooses; } public void setBigWildGooses(List bigWildGooses) { this.bigWildGooses = bigWildGooses; } }
/** * 大雁 */ public class BigWildGoose extends Bird implements IFly{ @Override public void fly() {} }f).實現關系
表示一個類實現一個或多個接口的方法。接口定義好操作的集合,由實現類去完成接口的具體操作, 在 Java 中使用 implements 表示。在 Java 中,如果實現了某個接口,那么就必須實現接口中所有的方法。
使用空心三角和虛線表示,箭頭指向接口。實線關系對類的耦合比較弱,所以使用虛線表示。
一般使用接口定義抽象行為。比如鳥具有飛行的行為!
UML表示
如圖所示:大雁實現了飛行接口,擁有了飛行行為。
/** * 大雁 */ public class BigWildGoose extends Bird implements IFly{ @Override public void fly() {} }
/** * 飛行接口 */ public interface IFly { void fly(); }
接口的其他表示方法:棒棒糖表示法
0x02.相似關系比較 1.依賴關系和關聯關系依賴關系:一般使應用實現在方法上,如果不調用方法使不需要使用的。因為依賴關系不強制,所以用虛線表示!
關聯關系:關聯關系是類屬性依賴,很關鍵,所以使用實線表示。
2.聚合關系和組合關系,空心和實心菱形數量少方向的是菱形箭頭。
聚合是一個盤子可以稱很多東西,但是他們是相同的,只是數量不同,不同的生命周期。是一組事物形成了一個新的整體,具有獨立的生命周期與行為。
組合的生命周期是相同的。
3.繼承和實現繼承:是類和類之間的關系,所以用實線。
實現:限制的不明顯,只限制了行為,所以用虛線。
只有知道對方信息,才可以被指向,所以箭頭的方向都是指向父類或接口。
0x04.源碼地址uml類圖: https://github.com/sigmako/design-pattern/tree/master/uml
0x05.參考慕課網設計模式精講: https://coding.imooc.com/class/270.html
大話設計模式: https://book.douban.com/subject/2334288/
設計模式之 UML 類圖: https://zhuanlan.zhihu.com/p/24576502
UML學習(二)-----類圖: https://www.cnblogs.com/silent2012/archive/2011/09/07/2169946.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74644.html
摘要:從零開始單排學設計模式的國服排位之旅,今天正式開啟目前段位定級賽這篇文章來總結下類圖,本來不打算講類圖的,因為我在學習設計模式的時候,一遇到有關的就會自動忽略,一看感覺就很復雜。關聯關系用實現箭頭來表示。 閱讀本文大概需要 3.5 分鐘。 本篇是設計模式系列的開篇,雖然之前也寫過相應的文章,但是因為種種原因后來斷掉了,而且發現之前寫的內容也很渣,不夠系統。 所以現在打算重寫,加上距離現...
摘要:類之間的關系關聯關系關聯關系是類與類之間最常用的一種關系,它是一種結構化關系,用于表示一個類對象與另一個類對象之間有聯系。自關聯在系統中可能會存在一些類的屬性對象類型為該類本身,這種特殊的關聯關系稱為自關聯。 UML UML:統一建模語言(Unified Modeling Language)。在 UML 系統開發中有三個主要的模型: 功能模型:從用戶的角度展示系統的功能,包括用例圖...
摘要:借助,自動提取代碼的動態調用流程圖。繪制類圖安裝是一個開源圖形可視化軟件。循環曲線表示遞歸過程調用。繪制的常用工具有靜態調用圖等。包括模塊之間的調用流程函數調用次數及耗時等。 ...
摘要:工廠模式單例模式結構型設計模式關注于如何將類或對象組合成更大更復雜的結構,以簡化設計。 一、寫在前面 設計模式的定義:在面向對象軟件設計過程中針對特定問題的簡潔而優雅的解決方案 當然我們可以用一個通俗的說法:設計模式是解決某個特定場景下對某種問題的解決方案。因此,當我們遇到合適的場景時,我們可能會條件反射一樣自然而然想到符合這種場景的設計模式。 比如,當系統中某個接口的結構已經無法滿足...
閱讀 683·2021-11-22 09:34
閱讀 3822·2021-09-22 15:42
閱讀 1327·2021-09-03 10:28
閱讀 1072·2021-08-26 14:13
閱讀 1901·2019-08-29 15:41
閱讀 1423·2019-08-29 14:12
閱讀 3364·2019-08-26 18:36
閱讀 3307·2019-08-26 13:47