設計模式-UML

UML基本介紹

  • UML–Unified modeling language UML(統一建模語言),是一種用於軟件系統分析和設計的語言工具,它用於幫助軟件開發人員進行思考和記錄思路的結果
  • UML本身是一套符號的規定,就像數學符號和化學符號一樣,這些符號用於描述軟件模型中的各個元素和他們之間的關係,比如類、接口、實現、泛化、依賴、組合、聚合等
  • 使用UML來建模。常用的工具有Rational Rose,也可以使用一些插件來建模如eclipse中的AmaterasUML,idea中的PlantUML等

UML圖

畫UML圖和寫文章差不多,都是把自己的思想描述給別人看,關鍵在於思路和條理,UML圖分類:

  • 用例圖(use case)
  • 靜態結構圖:類圖、對象圖、包圖、組件圖、部署圖
  • 動態行爲圖:交互圖(時序圖與協作圖)、狀態圖、活動圖

說明:類圖是描述類與類之間的關係的,是UML圖中最核心的

UML類圖

  • 用於描述系統中類(對象)本身的組成和類(對象)之間的各種靜態關係
  • 類之間的關係:依賴、泛化(繼承)、實現、關聯、聚合與組合
  • 類圖簡單舉例:
public class Person{
	private Integer id;
	private String name;
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
}

對應類圖如下:

@startuml
class Person {
    private Integer id;
    private String name;
    public void setName(String name)
    public String getName()
}
@enduml

在這裏插入圖片描述

類圖-依賴關係(Dependence)

只要是在類中用到了對方,那麼他們之間就存在依賴關係。如果沒有對方,連編譯都通過不了。
示例:

public class PersonServiceBean {
    private PersonDao personDao;
    public void save(Person person){}
    public IDCard getIDCard(Integer personid){
        return null;
    }
    public void modify(){
        Department department=new Department();
    }
}
public class PersonDao {
}
public class Person {
}
public class IDCard {
}
public class Department {
}

類圖:

@startuml
class PersonServiceBean {
    private PersonDao personDao;
    public void save(Person person)
    public IDCard getIDCard(Integer personid)
    public void modify()
}
class PersonDao{}
class Person{}
class IDCard{}
class Department{}

PersonDao <.. PersonServiceBean:依賴關係
Person <.. PersonServiceBean:依賴關係
IDCard <.. PersonServiceBean:依賴關係
Department <.. PersonServiceBean:依賴關係
@enduml

在這裏插入圖片描述
小結:以下情形都可以使用依賴關係

  • 類中用到了對方
  • 類的成員屬性
  • 方法的返回類型
  • 方法接收的參數類型
  • 方法中使用到
類圖-泛化關係(generalization)

泛化關係實際上就是繼承關係,他是依賴關係的特例
示例:

public abstract class DaoSupport {
    public void save(Object entity){
    }
    public void delete(Object id){
    }
}
public class PersonServiceBean extends DaoSupport{
}

類圖:

@startuml
abstract class DaoSupport {
    public void save(Object entity)
    public void delete(Object id)
}
class PersonServiceBean
DaoSupport <|-- PersonServiceBean:泛化關係
@enduml

在這裏插入圖片描述
小結:

  • 泛化關係實際上就是繼承關係
  • 如果A類繼承了B類,我們就說A和B存在泛化關係
類圖-實現關係(Implementation)

實現關係實際上就是A類實現B類,他是依賴關係的特例

public interface PersonService {
    public void delete(Integer id);
}
public class PersonServiceBean implements PersonService{
    @Override
    public void delete(Integer id) {
    }
}

類圖:

@startuml
interface PersonService {
    public void delete(Integer id);
}
class PersonServiceBean{
    public void delete(Integer id);
}
PersonService <|.. PersonServiceBean:實現關係
@enduml

在這裏插入圖片描述

類圖-關聯關係(Association)

關聯關係實際上就是類與類之間的聯繫,他是依賴關係的特例
關聯具有導航性:即雙向關係或單向關係
關係具有多重性:如“1”(表示有且僅有一個),“0…”(表示0個或者多個),“0,1”(表示0個或者一個),“n…m”(表示n到m個都可以),“m…”(表示至少m個)
單向一對一關係:

public class Person{
	private IDCard card; 
}
public class IDCard{}

類圖:

@startuml
class Person {
    private IDCard card;
}
class IDCard
Person"1"-->"1"IDCard:單向一對一
@enduml

在這裏插入圖片描述
雙向一對一關係:

public class Person{
	private IDCard card;
}
public class IDCard{
	private Person person;
}

類圖:

@startuml
class Person {
    private IDCard card;
}
class IDCard{
    private Person person;
}
Person"1"<-->"1"IDCard:雙向一對一
@enduml

在這裏插入圖片描述

類圖-聚合關係(Aggregation)

聚合關係(Aggregation)表示的整體和部分的關係整體與部分可以分開,聚合關係是關聯關係的特例,所有他具有關聯的導航性與多重性。
如:一臺電腦由鍵盤(keyboard)、顯示器(monitor),鼠標等組成;組成電腦的各個配件是可以從電腦上分離出來的,使用帶空心菱形的實線來表示:

public class Computer {
    private Monitor monitor;
    private Mouse mouse;
    private Keyboard keyboard;

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setKeyboard(Keyboard keyboard) {
        this.keyboard = keyboard;
    }
}
public class Keyboard {
}
public class Monitor {
}
public class Mouse {
}

類圖:

@startuml
class Computer {
    private Monitor monitor;
    private Mouse mouse;
    private Keyboard keyboard;
    public void setMonitor(Monitor monitor)
    public void setMouse(Mouse mouse)
    public void setKeyboard(Keyboard keyboard)
}
class Monitor
class Mouse
class Keyboard
Computer o-- Monitor:聚合關係
Computer o-- Mouse:聚合關係
Computer o-- Keyboard:聚合關係
@enduml

在這裏插入圖片描述

類圖-組合關係(Composition)

組合關係:也是整體和部分的關係,但是整體與部分不可以分開
示例:Person與IDCard、head,那麼head和Person就是組合,IDCard和Person就是聚合。
但是如果在程序中Person實體定義了對IDCard進行級聯刪除,即刪除Person時連同IDCard一起刪除,那麼IDCard和Person就是組合了。

public class Person {
    private IDCard card;
    private Head head=new Head();
}
public class IDCard {
}
public class Head {
}

類圖:

@startuml

class Person {
    private IDCard card;
    private Head head=new Head();
}
class Head {
}
class IDCard {
}
Person o-- IDCard:聚合關係
Person *-- Head:組合關係
@enduml

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章