UML類圖的幾種關系

類圖是描述類與類之間關系的示意圖,它形象的描述了系統的結構,有助于與更深刻的理解軟件的設計思想。
類圖中類的關系由強到弱可以分為4種:泛化 ---> 實現 ---> 關聯 ---> 依賴。

1. 泛化

關系說明:泛化是一種繼承。它指定了子類如何特化父類的所有特征和行為。
代碼說明:父類與子類
圖例:空心三角形的實線箭頭,箭頭指向父類
代碼:

public class Base{
}
public class BaseExt extends Base{
}

2. 實現

關系說明:實現是一種類與接口的關系,表示類是接口所有特征和行為的實現。
代碼說明:實現類和接口
圖例:空心三角形虛線箭頭,箭頭指向接口
代碼:

public interface IBase{
    public void doSomething();
}

public class BaseImp implements IBase{
    @Override
    public void doSomething(){
       System.out.println("doSomething!");
    }
}

3. 關聯

關系說明:關聯表示類與類之間的擁有關系。即一個類是另一個類的成員。
關聯的種類:自關聯、單向關聯、雙向關聯、多重關聯、聚合、組合等

3.1 自關聯

關系說明:一個類包含自己。
代碼說明:成員變量
圖例:普通實線箭頭指向自己
代碼:

 public class Node {
     private Node node;
}

3.2 單向關聯

關系說明:一個類包含另一個類的成員,另一個類沒有該類的成員
代碼說明:成員變量
圖例:普通實線箭頭指向被關聯的類
代碼:

public class NodeA{
}
public class NodeB{
   private NodeA nodeA;
}

3.3 雙向關聯

關系說明: 兩個類互相包含另一個類的成員。(容易循環引用,造成內存泄漏)
代碼說明:成員變量
圖例:普通實線,不帶箭頭
代碼:

public class NodeA{
    private NodeB nodeB;
}

public class NodeB{
    private NodeA nodeA;
}

3.4 多重關聯

關系說明:一個類中包含另一個類的多個成員。
代碼說明:成員變量
圖例:帶數量關系說明的實線,不帶箭頭。
代碼:

public class NodeA{
}
public class NodeB{
    private NodeA[] nodeAs;
}

3.5 聚合

關系說明:聚合是整體與部分的關系,成員對象是整個對象的一部分,成員對象的可以獨立存在。如:輪胎和汽車關系
代碼說明:成員變量
圖例:帶空心菱形的實線箭頭,菱形指向整體,箭頭指向部分。
代碼:

public class Car{
    public Tire tire;
}
public class Tire{
}

3.6 組合

關系說明:組合是整體與部分的關系,成員對象是整體的一部分,整體對象控制著成員對象的生命周期,一旦整體不存在,成員對象也不存在。如:人的身體和手
代碼說明:成員變量
圖例:帶實心菱形的實線箭頭,菱形指向整體,箭頭指向部分
代碼:

public class Body{
    private Hand hand;
}
public class Hand{
}

4. 依賴

關系說明:依賴表示類與類之間的使用關系。表示一個事物使用另一個事物。
代碼說明:局部變量、方法的參數或者對靜態方法、成員的調用
圖例:帶箭頭的虛線,指向被使用者
代碼:

public class Boat{
}
public class People{  
    public int acrossRiver(Boat boat){
          .........
    }
}

5. 總結

對類圖關系的理解,可以幫助更好的理解設計模式的精髓。后面筆者將逐步介紹幾種常見的設計模式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容