1. 程式人生 > 其它 >設計模式——類圖以及類與類之間的關係

設計模式——類圖以及類與類之間的關係

    設計模式在程式設計上有著很重要的作用,使用設計模式可以使得程式碼更容易被理解,使得程式碼更規範,真正實現工程化。

一、用UML表示一個類

類圖一般是三行的結構:

  1. 類名稱
  2. 屬性:格式(可見性 名稱:型別[=預設值])
  3. 方法:格式(可見性 名稱(引數列表)[返回型別])

注:在Visio中的畫的類圖中使用的是C#的資料型別,與Java的略有差別。

二、類與類之間的關係

類與類之間主要有6種關係,包括依賴,關聯,聚合,組合,繼承,實現。他們的耦合度是一次增強的。

1、依賴(Dependency)

    依賴主要體現了一種使用關係,兩個相對獨立的物件,當一個物件負責構造另一個物件的例項,或者依賴另一個物件的服務時,主要體現為依賴關係。

    依賴關係主要有3種表現形式:(以類A中使用了類B為例)

  1. 類B是作為類A的方法引數
  2. 類B是類A的方法中的區域性變數
  3. 在類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());
	}
}

2、關聯(Association)

關聯主要體現的是一種對應關係,兩個相對獨立的物件,當一個物件的例項與另一個物件的例項存在固定的對應關係時,這兩個物件之間為關聯關係。通常是將一個類的物件作為另一個類的成員變數。

關聯關係的分類:

  1. 單向關聯
  2. 雙向關聯

(單向關聯)

(雙向關聯)

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{
	
}

參考文獻

  1. 深入淺出UML類圖(http://www.uml.org.cn/oobject/201211231.asp)
  2. 設計模式中類的關係(http://blog.csdn.net/zhengzhb/article/details/7187278)