設計模式 二 策略模式

2021-10-21 16:52:58 字數 1274 閱讀 6557

策略模式是一種定義一系列演算法的方法,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。

策略模式是用來封裝演算法的,在實踐中,可以用來封裝幾乎任何型別的變化。

在超市現金收費演算法中,有正常收費,滿300-100,打8折等多種收費方式,把收費演算法 cashsuper 看成抽象策略。

各種收費方式看成具體的策略類,繼承 cashsuper 抽象基類

其中 cashcontext 用來創造具體策略類的例項,呼叫其具體的策略演算法。

在 cashcontext 中的 switch 分支進行簡單工廠模式的結合,根據字串進行判斷,與客戶端徹底分離,客戶端中只需維持乙個 cashcontext 的物件。

//抽象策略

public

abstract

class

cashsuper

//具體的策略類,實現各種的收費演算法

public

class

cashnormal

extends

cashsuper

}public

class

cashrebate

extends

cashsuper

@override

public

double

acceptcash

(double money)

}public

class

cashreturn

extends

cashsuper

@override

public

double

acceptcash

(double money)

}//上下文物件,結合簡單工廠模式

public

class

cashcontext

}//根據上下文運用多型呼叫各自的收費演算法

public

double

getresult

(double money)

//客戶端

public

static

void

main

(string[

] args)

throws exception

}

輸出

收費為1000.0

收費為600.0

收費為800.0

設計模式 二 策略模式

定義演算法家族,分別封裝起來,讓它們之間可以互相替換,讓演算法變化,不會影響到使用者 good 適合類中的成員以方法為主,演算法經常變動 簡化了單元測試 因為每個演算法都有自己的類,可以通過自己的介面單獨測試。策略模式和簡單工廠基本相同,但簡單工廠模式只能解決物件建立問題,對於經常變動的演算法應使用...

設計模式(二) 策略模式

策略模式 strategy 它定義了乙個演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。現金收費抽象類 abstract class cashsuper 正常收費子類 class cashnormal cashsuper 打折收費子類 class ...

設計模式(二) 策略模式

策略模式定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。我們來實現乙個簡單的商場收銀軟體功能來闡述策略模式 1.我們先來定義乙個收費方式的基類,如下 using system namespace strategy 2.收費方案,如下 usin...