最近在學習設計模式,接觸最多的就是先用UML類圖畫出這種設計模式。日常看其餘人的博客多多少少也碰到UML類圖,畢竟再多的文字,都沒有一張圖來的直白。掌握UML圖其實對與java程序員來講,仍是頗有必要的。java
類
java中的類咱們最熟悉不過了。好比我新建了一個下面的類程序員
public class Phone { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } protected void call(){ } }
對應的Phone類的UML圖爲 設計模式
- 圖分爲三層:最頂層的爲類名,中間層的爲屬性,最底層的爲方法
- 屬性的表示方式爲: 【可見性】 【屬性名稱】 :【類型】 = {缺省值,可選}
- 方法的表示方式爲: 【可見性】 【方法名稱】 (【參數列表】):【類型】
- 可見性都是同樣的,'-' 表示private、‘+’表示public、‘#’表示protected
繼承關係
繼承關係是用於描述父子類之間的關係的,父類又稱爲基類或者超類。子類又稱做派生類。( 記得以前看其餘人的博客。看到超類。瞬間懵逼了,後來一查,就是父類,因此基礎的東西必定要掌握牢固)ide
下面定義個Mi和Oppo函數
public class Mi extends Phone{ private String miVersion; public void hot(){ } } public class Oppo extends Phone { private String oppoVersion; public void beautiful(){ } }
對應的UML類圖爲 學習
- 泛化關係使用帶空心三角形的實現來表示
接口
接口 你們日常常常用到,在接口中一般沒有屬性this
public interface Language { public void hello(); }
對應的UML類圖spa
- 在方法上應當有《interface》,表示是一個接口
實現關係
咱們定義了接口,就去實現接口設計
public class Chinese implements Language { @Override public void hello() { System.out.println("你好"); } } public class English implements Language{ @Override public void hello() { System.out.println("hello"); } }
對應的UML類圖code
- 使用空心三角形虛線表示
關聯關係
關聯關係是類與類 之間最多見的一種關係,它是一種結構化的關係。表示一類對象與另外一類對象之間有聯繫。關聯關係分單向關聯、雙向關聯 、自關聯
單向關聯
單向關聯指的是 關聯只有一個方向,好比 咱們程序員擁有電腦
public class Computer { } public class Programmer { private Computer computer; }
對應的UML類圖爲
雙向關聯
雙向關聯的關係就是雙向的,好比程序員買電腦 ,反之。電腦也 和程序員關聯。這就是雙向關聯。
public class Computer { private Programmer programmer; } public class Programmer { //程序員不止一臺電腦 private Computer[] computer; }
對應的UML類圖爲
- 有的地方也會使用雙向的箭頭表示,碰到的時候 不要糾結於這個
自關聯
自關聯指的就是對象中的屬性爲對象自己,我首先就想到了單例模式
public class Singleton { //構造函數私有化 private Singleton(){ } private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }
對應的UML類圖爲
依賴關係
能夠簡單理解,就是一個類A使用到了類B.這種使用關係是具備偶然性的、臨時性的。可是B的變化會影響到A. 好比,駕駛員(Driver)開車,Driver類的drive()方法將車(Car)的對象做爲一個參數傳遞,以便在drive()方法中可以調用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,所以也能夠說Driver依賴Car
public interface Car { public void move(); } public class Driver { public void drive(Car car) { car.move(); } }
對應的UML類圖爲
- 用帶箭頭的虛線表示
- 依賴關係一般經過三種方式來實現
- 將一個類的對象做爲另外一個類中方法的參數
- 在一個類的方法中將另外一個類的對象做爲其對象的局部變量
- 在一個類的方法中調用另外一個類的靜態方法
聚合關係
聚合關係表示總體與部分的關係,在聚合關係中,成員對象實總體的一部分,可是成員對象能夠脫離總體對象獨立存在。好比電腦有 cpu,ssd
public class Cpu { } public class Ssd { } public class Computer { private Cpu cpu; private Ssd ssd; public Computer(Cpu cpu, Ssd ssd) { this.cpu= cpu; this.ssd= ssd; } }
對應的UML類圖
- 用空心菱形直線表示
- 代碼實現聚合關係,成員對象一般以構造方法、Setter方法的方式注入到總體對象之中。
組合關係
組合關係也表示的是一種總體和部分的關係。可是在組合關係中總體對象能夠控制成員對象的聲明週期,一旦總體對象不存在,成員對象也不存在,有種同生共死的感受。好比人的 頭 和嘴巴、鼻子。嘴巴和鼻子是頭的組成部分之一,一旦頭沒了,嘴巴也沒有了(好可怕)。
public class Mouth { } public class Nose { } public class Head { private Mouth mouth; private Nose nose; public Head() { mouth = new Mouth(); nose = new Nose(); } }
對應的UML類圖
- 用實心菱形直線表示
基本上經常使用的都介紹完了,不過實際應用中,沒必要徹底糾結於細節,合理的利用對象之間的關係給出合理的設計方案便可
對了。我先在畫圖都是用在線的 processon