設(shè)計模式在程序設(shè)計上有著很重要的作用,使用設(shè)計模式可以使得代碼更容易被理解,使得代碼更規(guī)范,真正實現(xiàn)工程化。
一、用UML表示一個類

類圖一般是三行的結(jié)構(gòu):
- 類名稱
- 屬性:格式(可見性 名稱:類型[=缺省值])
- 方法:格式(可見性 名稱(參數(shù)列表)[返回類型])
注:在Visio中的畫的類圖中使用的是C#的數(shù)據(jù)類型,與Java的略有差別。
二、類與類之間的關(guān)系
類與類之間主要有6種關(guān)系,包括依賴,關(guān)聯(lián),聚合,組合,繼承,實現(xiàn)。他們的耦合度是一次增強的。
1、依賴(Dependency)
依賴主要體現(xiàn)了一種使用關(guān)系,兩個相對獨立的對象,當(dāng)一個對象負責(zé)構(gòu)造另一個對象的實例,或者依賴另一個對象的服務(wù)時,主要體現(xiàn)為依賴關(guān)系。
依賴關(guān)系主要有3種表現(xiàn)形式:(以類A中使用了類B為例)
- 類B是作為類A的方法參數(shù)
- 類B是類A的方法中的局部變量
- 在類A中調(diào)用類B的靜態(tài)方法
在依賴中使用的是“虛線+箭頭”。
public void read(Book book){ System.out.println("讀的書是:" + book.getName()); public void eat(Food food){ System.out.println("吃的是:" + food.getName());
2、關(guān)聯(lián)(Association)
關(guān)聯(lián)主要體現(xiàn)的是一種對應(yīng)關(guān)系,兩個相對獨立的對象,當(dāng)一個對象的實例與另一個對象的實例存在固定的對應(yīng)關(guān)系時,這兩個對象之間為關(guān)聯(lián)關(guān)系。通常是將一個類的對象作為另一個類的成員變量。
關(guān)聯(lián)關(guān)系的分類:
- 單向關(guān)聯(lián)
- 雙向關(guān)聯(lián)
(單向關(guān)聯(lián))

(雙向關(guān)聯(lián))
private ClassName className; public Student(String id){ this.className = new ClassName();
3、聚合(Aggregation)
聚合是關(guān)聯(lián)關(guān)系的一種,表現(xiàn)了一種弱的“擁有”關(guān)系,關(guān)聯(lián)關(guān)系的對象之間是相互獨立的,但是聚合關(guān)系的對象之間存在著一種包容關(guān)系,體現(xiàn)的是A對象可以包容B對象,但是B對象不是A對象的一部分。他們之間是“整體-個體”的關(guān)系。

成員對象通常作為構(gòu)造方法、Setter方法或業(yè)務(wù)方法的參數(shù)注入到整體對象中。
public People(Student student, Worker worker, Farmer farmer){
4、組合(Composition)
組合是一種強的“擁有”關(guān)系,組合中的類之間是“整體-部分”的關(guān)系,“整體”負責(zé)“部分”的生命周期,“部分”和“整體”的生命周期是一樣的,“部分”單獨存在是沒有任何意義的。通常在整體類的構(gòu)造方法中直接實例化成員類。

5、繼承(Generalization)
繼承表示的是類與類之間或者接口與接口之間的父子關(guān)系,在java中使用的是extends關(guān)鍵字。

public class Bird extends Animal{
6、實現(xiàn)(Implementation)
實現(xiàn)表示的是一個類實現(xiàn)一個或者多個接口,在java中使用的是implements關(guān)鍵字。

public class Bird implements Animal{
參考文獻
- 深入淺出UML類圖(http://www./oobject/201211231.asp)
- 設(shè)計模式中類的關(guān)系(http://blog.csdn.net/zhengzhb/article/details/7187278)
|