天天看點

軟體構造4.3面向複用的設計模式結構模式行為模式建立模式

設計模式:針對軟體設計中給定環境中經常出現的問題的通用的、可重用的解決方案。除了類本身,設計模式更強調多個類/對象之間的關系和互動過程—比接口/類複用的力度更大。

面向複用的設計模式主要有以下幾種:

結構模式

(通過改變類的結構,使類具有新的特性。)

擴充卡模式

當使用者希望的接口形式(參數形式)和已經實作的方法接口(可複用的方法)不比對時,需要設計一個擴充卡接口,擴充卡中所有API的格式都符合使用者的要求,在擴充卡接口的具體實作中調用可複用的方法即可。

裝飾器模式

适用場景:一個基礎類想要擴充另外的特性時(多個,如果使用直接使用繼承,因為會組合爆炸,而生成複雜的繼承樹,且工作量很大,會有較多的重複代碼,不符合可複用性軟體的需求。),需要使用裝飾器模式(繼承+委托),可以實作需要增加的特性的任意組合。

實作方法:建立一個裝飾類,有一個指向基礎類的引用,裡面所有的方法都是通過委托給基礎類來實作的。然後通過繼承裝飾類來實作各個需要增加的功能。

軟體構造4.3面向複用的設計模式結構模式行為模式建立模式

在使用時,因為裝飾類中是其他類的引用,是以可以用添加了功能1的類作為功能2的類中的引用,即可實作層層套用裝飾了。

軟體構造4.3面向複用的設計模式結構模式行為模式建立模式

門面模式

提供一個統一的接口來取代一系列小接口調用,相當于對複雜系統做了一個封裝,簡化用戶端使用。

行為模式

(如何在類中的多個行為之間進行切換。)

政策模式

适用場景:有多種不同的算法來實作同一個任務,但需要client根據需要動态切換算法,而不是寫死在代碼裡。

實作方法:為不同的實作算法構造抽象接口,利用delegation,運作時動态傳入client傾向的算法類執行個體。

軟體構造4.3面向複用的設計模式結構模式行為模式建立模式

模闆模式

實作算法的步驟相同,但具體的實作方法不同,例如,設計framework時的白盒架構。實作方法一般為繼承父類,父類一般為抽象類,共性的步驟在抽象類内公共實作,差異化的步驟在各個子類中實作。使用繼承和重寫實作模闆模式。(其中固定的方法可以用final關鍵字來修飾。)

疊代器模式

适用場景:用戶端希望周遊被放入容器/集合類的一組ADT對象,無需關心容器的具體類型。當有需求設計一個集合類時,同時應該實作該集合類的疊代器。

疊代器模式的實作方法:設計集合類的接口,繼承Iterable接口,

public interface Iterable<T>{
 	...
 	Iterator<T> iterator();
 }
           

這樣設計的集合類就能生成屬于每個執行個體對象的疊代器了,在該方法中,會把該執行個體的集合引用傳遞給疊代器。然後實作自己的獨特Iterator 疊代器(hasNext, next, remove) ,允許用戶端利用這個疊代器進行顯式或隐式的疊代周遊:

public interface Iterator<E> {
	boolean hasNext();
	E next();
	void remove();
}
           

顯示周遊:

Iterator<E> iter = collection.iterator(); while(iter.hasNext()) { … }

隐式周遊:

for (E e : collection) { … }

建立模式

(之後再補)