策略模式相較之於簡單工廠模式適用於生產方法經常變化且方法較為繁多的情況,因為生產方法時常變化就會需要頻繁修改工廠類,違背了開閉原則,這時就可以用策略選擇類由客戶端根據需求動態切換策略。且策略模式通過進一步封裝了**細節,沒有像簡單工廠模式那樣在客戶端建立詳細的物件,而把任務交給了策略選擇類去執行,所以客戶端不會知道太多演算法實現的細節。當然,在更多的情況下,策略模式一般可以與簡單工廠模式並用,將進行策略選擇的switch結構封裝進策略選擇類。
下面利用商場活動作為例子展示一段策略模式與簡單工廠模式結合的**,因為商場活動具體方案經常變化且種類繁多,所以適合策略模式的應用。
//策略父類,抽象介面
class cashsuper
;//正常收費類
class cashnormal :public cashsuper
;//打折類
class cashrebate :public cashsuper
virtual
double acceptcash(double&);
private:
double moneyrebate;
};//滿返類(例如 滿100返20)
class cashreturn :public cashsuper
virtual
double acceptcash(double&);
private:
double moneysource; //滿xx
double moneytarget; //返xx
};//策略類
class cashcontext
else
if (type == _t("rebate"))
else
if (type == _t("return"))
else
}double getresult(double money) //購買商品的原價
private:
cashsuper * cs = null;
};//具體策略介面實現
double cashnormal::acceptcash(double& money)
//具體策略介面實現
double cashrebate::acceptcash(double& money)
//具體策略介面實現
double cashreturn::acceptcash(double& money)
return money;
}
///
//////
//////
//////
//////
////
//// @author : peterzheng
// @filename : strategymodedemo.cpp
// @date : 2018-08-07 22:00
/////
//////
//////
//////
//////
////
#include "strategydefine.h"
using namespace std;
int _tmain(void)
大話設計模式 簡單工廠模式與策略模式
簡單工廠模式 運算類工廠 public class operationfactory case case case case sqr case sqrt case return oper 關聯關係 如下 class penguin bird private climate climate 聚合關係如...
設計模式 簡單工廠模式 策略模式
名詞理解 工廠 factory 模式我們可以做如下理解,假設有乙個audi的公司生產汽車 似乎也不用假設了 它掌握一項核心的技術就是生產汽車,另一方面,它生產的汽車是有不同型號的,並且在 不同的生產線上進行組裝。當客戶通過銷售部門進行預定後,audi公司將在指定的生產線上為客戶生產出它所需要的汽車。...
設計模式之簡單工廠模式,工廠模式,策略模式
簡單工廠模式 的最大優點是在工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態例項化相關類,去得到客戶想要的產品。但個人覺得簡單工廠模式的最大優點正是產生它最大缺點之處。因為它的工廠類違反了開放 封閉原則 類,模組,方法等對於擴充套件是開放的,對於更改是封閉的。每當新增乙個功能,我們就需要去修改它的...