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