UML類圖學習

最近在學習設計模式,接觸最多的就是先用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

相關文章
相關標籤/搜索