咱們目前已經學習了設計模式的7種設計原則。下面本該是直接進入具體的設計模式系列文章。java
可是呢在咱們學習設計模式以前咱們仍是有必要了解一下uml圖。由於後續的設計模式文章不出意外應該會不少地方使用到uml圖。若是你連uml圖都看不懂的話,那麼學習起來確定會有必定的難度。設計模式
因此說,這一節就做爲承上啓下的章節,讓咱們來了解一下uml圖吧。(固然若是你已經會UML圖了,你徹底能夠跳過這個章節)dom
按照慣例,咱們仍是要讓你們知道什麼是UML圖:ide
UML有不少種類,什麼用例圖,靜態結構圖,動態行爲圖。工具
而做爲java程序猿,咱們最關注的的仍是靜態結構圖中的類圖便可,因此你只須要記住這一句話就能夠了:UML圖就是用來描述各個類,接口之間的關係圖。學習
咱們下面包括從此的UML類圖都是用IntelliJ IDEA自帶的類圖工具來展現 ,每一個軟件的畫圖風格會有一點點區別,可是核心的東西是不會變。idea
好的,我開始進入主題設計
類與類之間的關係咱們能夠分爲如下幾點:code
因爲咱們大部分時間使用的是idea自帶的工具Uml Support來生成的uml圖(快捷鍵:ctrl+alt+shift+u)。雖然大致類圖線條的畫法是相同的,可是IDEA生成的UML圖的聚合關係和組合關係稍稍有點不一樣,咱們接着往下看.繼承
只要是在類中用到了對方,那麼他們之間就存在依賴關係。
依賴關係包含其餘5中關係。是最大的一層關係。
//手機類 public class CellPhone { //手機能夠玩遊戲 public void playGames(){ System.out.println("play games"); } } //普通人 public class Person { //買手機 public CellPhone buyCellPhone(){ return new CellPhone(); } //買個手機玩遊戲 public void play(){ CellPhone cellPhone = buyCellPhone(); cellPhone.playGames(); } }
泛化關係實際上就是繼承關係,他是依賴關係的特例(真子集)。
//Person表明人 public class Person { } //Man表明男人 public class Man extends Person{ }
實現關係實際上就是A類實現B接口,他是依賴關係的特例(真子集)。
//Dao接口 public interface Dao { } //Dao實現 public class DaoImpl implements Dao { }
爲何把這三個放在一塊兒呢?
由於三者在代碼上的表現相同,只是語意上有所差異。
1 關聯:
類與類之間的聯繫,關係具備多重性,如:
「1」(表示有且僅有一個) 「0...」(表示0個或者多個) 「0,1」(表示0個或者一個) 「n...m」(表示n到 m個均可以) 「m...*」(表示至少m個)
2 聚合:
部分能夠離開總體單獨存在,舉一個例子。學校類中有一個學生類。當咱們建立一個學校類的時候,可能由於剛創辦,尚未學生。因此學生類是能夠不存在的。不影響學校類的建立。他是依賴關係的特例(真子集)。
3 組合:
總體和部分同生共死,部分脫離總體會變得毫無心義,強調同生共死的一致的生命週期。
例如學生類中的身份證證類。每一個學生確定都會有身份證。在學生類被實例化成功之後,身份證類也被實例化成功。學生類是不能脫離身份證類單獨存在的。他是依賴關係的特例(真子集)。
//學校 public class School { public List<Student> studnets; } //學生 public class Student { private IdentityCard identityCard = new IdentityCard(); //組合關係,建立student的時候也建立了身份證 } //身份證 public class IdentityCard { private String id = UUID.randomUUID().toString(); }
一個學校有不少個學生,一個學生只有一個身份證。因此上面三個類的UML圖以下:
首先咱們來看實線箭頭,箭頭方向指的是依賴的方向。School箭頭指向Student標註1 * 表示:一個學校有多個學生。
Student的實線箭頭指向IdentityCard而且標註的是1 1表示:一個學生只有一個學校和一個身份證。
而後咱們看菱形圖。正常來講,聚合關係應該是空心的菱形圖,組合關係纔是實心的菱形圖,可是IDEA的集成工具將聚合和依賴關係都以實心菱形圖來表示。
按照標準的uml圖來講,student和school之間應該是空心的菱形圖。IdentityCard與Student纔是實線的菱形圖。
雖說idea的畫法有點不一樣,爲了他的便利性咱們也忍了。就比如大腸的功能雖然很髒,可是爲了它的美味我能仍受,而且享受它。
好了,UNL圖就到這裏了,咱們前期鋪墊了那麼多,從下一節開始終於進入了主題,具體的設計模式系列。