資深程序員之路(3)--設計模式與UML class圖

設計模式與UML class圖
設計模式在程序設計上有着很重要的作用,使用設計模式可以使得代碼更容易被理解,使得代碼更規範,真正實現工程化。
一、用UML表示一個類

這裏寫圖片描述
類圖一般是三行的結構:
類名稱
屬性:格式(可見性 名稱:類型[=缺省值])
方法:格式(可見性 名稱(參數列表)[返回類型])
注:在Visio中的畫的類圖中使用的是C#的數據類型,與Java的略有差別。
二、類與類之間的關係

類與類之間主要有6種關係,包括依賴,關聯,聚合,組合,繼承,實現。他們的耦合度是一次增強的。
1、依賴(Dependency)這裏寫圖片描述

依賴主要體現了一種使用關係,兩個相對獨立的對象,當一個對象負責構造另一個對象的實例,或者依賴另一個對象的服務時,主要體現爲依賴關係。
依賴關係主要有3種表現形式:(以類A中使用了類B爲例)
類B是作爲類A的方法參數
類B是類A的方法中的局部變量
在類A中調用類B的靜態方法

在依賴中使用的是“虛線+箭頭”。
這裏寫圖片描述

public class Student {  
    public void read(Book book){  
        System.out.println("讀的書是:" + book.getName());  
    }  

    public void eat(Food food){  
        System.out.println("吃的是:" + food.getName());  
    }  
}  

再舉個栗子,一般的增刪改查,這個查詢的環節就是獲取整個列表,那個單個條目Model和整個列表Collection之間就是依賴關係。

2、關聯(Association)這裏寫圖片描述 這裏寫圖片描述 這裏寫圖片描述

關聯主要體現的是一種對應關係,兩個相對獨立的對象,當一個對象的實例與另一個對象的實例存在固定的對應關係時,這兩個對象之間爲關聯關係。通常是將一個類的對象作爲另一個類的成員變量。
關聯關係的分類:
單向關聯
雙向關聯
自關聯
這裏寫圖片描述

這裏寫圖片描述

對於兩個相對獨立的對象,當一個對象的實例與另一個對象的一些特定實例存在固定的對應關係時,這兩個對象之間爲關聯關係。關聯關係分爲單向關聯和雙向關聯。在java中,單向關聯表現爲:類A當中使用了類B,其中類B是作爲類A的成員變量。雙向關聯表現爲:類A當中使用了類B作爲成員變量;同時類B中也使用了類A作爲成員變量。

public class Student{  
    private String id;  
    private ClassName className;  

    public Student(String id){  
        this.id = id;  
        this.className = new ClassName();  
    }  
}  

舉個栗子,這裏的類之間是同級關係的,比如老師和學生,都是屬於人物的不同角色。

3、聚合(Aggregation)這裏寫圖片描述

聚合是關聯關係的一種,表現了一種弱的“擁有”關係,關聯關係的對象之間是相互獨立的,但是聚合關係的對象之間存在着一種包容關係,體現的是A對象可以包容B對象,但是B對象不是A對象的一部分。他們之間是“整體-個體”的關係。
這裏寫圖片描述
成員對象通常作爲構造方法、Setter方法或業務方法的參數注入到整體對象中。

public class People{  
    private Student student;  
    private Worker worker;  
    private Farmer farmer;  

    public People(Student student, Worker worker, Farmer farmer){  
        this.student = student;  
        this.worker = worker;  
        this.farmer = farmer;  
    }  
}  

再舉個栗子,比如一個報銷申請,要用到員工信息,部門信息,審批信息等,他們之間就是聚合關係。類和類之間是有層級關係的。

4、組合(Composition) 這裏寫圖片描述

組合是一種強的“擁有”關係,組合中的類之間是“整體-部分”的關係,“整體”負責“部分”的生命週期,“部分”和“整體”的生命週期是一樣的,“部分”單獨存在是沒有任何意義的。通常在整體類的構造方法中直接實例化成員類。
這裏寫圖片描述

public class Bird{  
    private Wing wing;  

    public People(){  
        wing = new Wing();  
}  

5、繼承(Generalization) 這裏寫圖片描述

繼承表示的是類與類之間或者接口與接口之間的父子關係,在java中使用的是extends關鍵字。

這裏寫圖片描述

public class Bird extends Animal{  

}  

6、實現(Implementation)這裏寫圖片描述
這裏寫圖片描述

實現表示的是一個類實現一個或者多個接口,在java中使用的是implements關鍵字。

public class Bird implements Animal{  

}  


參考:
http://blog.csdn.net/google19890102/article/details/44903645

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