策略模式是一種定義一系列演算法的方法,定義了演算法家族,分別封裝起來,讓他們可以相互轉化,此模式可以讓演算法相互轉化,且不會影響到演算法使用者。從概念上來看,所以的演算法完成都是相同的工作,只是實現不同。它可以以相同方式呼叫所有的演算法,減少了各種演算法類與使用演算法類的耦合。
我們用書裡面的例子演示一下:假如超市的售貨員給顧客結賬時,她應該如何選擇那種結算方式呢?
假如有:滿100減20,滿300減70,打5折等等。
我們想,如果用正常的邏輯語句應該怎麼寫:
if
(money>=
100)
else
if(money>=
300)
else
當我們每加入一次結算方式,我們就需要加入一條if-else語句(或者switch語句)實現,然後進行大量的編譯過程,浪費大量的人力物力。
既然學習了設計模式,我們就把這個問題系統化。
使用之前所學的工廠模式實現.
先設計出來uml圖.
//工廠模式
abstractcashbuy*
createcashbuy
(string str)
else
if(str ==
"discount"
)else
if(str ==
"reduct")}
};intmain()
策略模式的uml圖:
**如下:(與工廠模式結合)
#include
#include
#include
using
namespace std;
class
abstractcashbuy
;class
cashbuynormal
:public abstractcashbuy};
class
cashbuydiscount
:public abstractcashbuy
virtual
double
accpetcash
(double money)};
class
cashbuyreduct
:public abstractcashbuy
virtual
double
accpetcash
(double money)};
class
cashbuyfactory
else
if(str ==
"discount"
)else
if(str ==
"reduct")}
double
getmoney
(double money)
}int
main()
策略模式的strategy類層次為context定義了一系列的可供重用的演算法。繼承有助於析取出這些演算法的公共功能,簡化了單元測試。並且發現,在策略模式中,我們只需要記住乙個cashbuyfactory 類即可,而在工廠模式中,我們需要記住兩個類 cashbuyfactory 和 abstractcashbuy。所有策略模式簡化了類的數量。 設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...