軟體構造 復用性與各種設計模式(2)行為類模式

2021-10-07 14:29:15 字數 1913 閱讀 5663

行為類模式 :描述類/物件互動和互相分配責任的方式,允許演算法和物件職責分配之間的選擇(「誰做什麼」);簡化在執行時難以追蹤的複雜的控制流。

有多種不同的演算法來實現同乙個任務,但需要client根據需要動態切換演算法,而不是寫死在**裡

為不同的是實現演算法構造抽象介面,利用委派,執行時動態傳入滿足客戶端傾向的演算法類例項。

參考之前的部落格

其中有對策略模式的總結

幾個客戶機共享相同的演算法,但在細節上有所不同。比如該演算法由可定製部分和不變部分組成。公共步驟不應該在子類中重複,而是需要重用,總的來說,就是做事情的步驟一樣,但具體方法不同;共性的步驟在抽象類內公共實現,而差異化的步驟在各個子類中實現 。

完成一件事情,有固定的數個步驟,但是每個步驟根據物件的不同,而實現細節不同;就可以在父類中定義乙個完成該事情的總方法,按照完成事件需要的步驟去呼叫其每個步驟的實現方法。每個步驟的具體實現,由子類完成。

例項:例如對於乙個處理購買商品的類

public

abstract

class

orderprocesstemplate

public

abstract

void

dodelivery()

;public

final

void

processorder()

}

這個抽象類作為模板,提供兩種具體的購買方式

例如:

public

class

netorder

extends

orderprocesstemplate

@override

public

void

dopayment()

@override

public

void

dodelivery()

}

在呼叫時,只需呼叫具體的類即可

客戶端希望遍歷被放入 容器/集合類的一組adt物件,無需關心容器的具體型別,不管物件被放進**,都提供同樣的遍歷方式 。能夠提供一種方法順序訪問乙個聚合物件中的各種元素,而又不暴露該物件的內部表示。

public

class

pair

implements

iterable

public iterator

iterator()

private

class

pairiterator

implements

iterator

public e next()

if(!seensecond)

throw

newnosuchelementexception()

;}public

void

remove()

}}

讓集合類實現iterable介面,並實現獨特iterator迭代器(hasnext, next, remove),允許客戶端利用這 個迭代器進行顯式或隱式的迭代遍歷即可。

軟體構造 可復用性 Strategy模式

問題 針對特定任務存在多種演算法,呼叫者需要根據上下文環境動態的選擇和切換。strategy模式 定義乙個演算法的介面,每個演算法用乙個類來實現,客戶端針對介面編寫程式。圖示如下 stategy介面 演算法介面 concretestategya類 具體演算法a concretestategyb類 具...

軟體構造複習 設計模式2

產品 工廠都是介面,具體產品 具體工廠實現介面,每個工廠只生產乙個產品 抽象工廠和工廠類似,只是乙個工廠可以生產一系列配套的元件,比如windows的視窗 按鈕等等,不再贅述 當載入物件代價較大時,可用 快取,避免重複載入 另一方面,也可用作 防火牆 將內外部資料隔離 類似新聞推送,明星維護觀察者佇...

軟體構造設計模式(上)

visitor訪問者模式 observer觀察者模式 template模版模式 decorator裝飾器模式 adapter介面卡模式 指物件有某個行為,但在不同的場景中,該行為有不同的實現演算法。定義一系列演算法類,將每乙個演算法封裝起來,並讓它們可以相互替換。主要目的是將演算法的定義和使用分開,...