c 實現策略模式

2021-10-16 19:50:11 字數 2237 閱讀 6613

策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。簡單工廠模式是建立型模式,它的作用是建立物件。策略模式是行為型模式,作用是在許多行為中選擇一種行為,關注的是行為的多樣性。簡單來說策略模式就是將多種行為方法封裝成一種策略並統一做呼叫,呼叫的方法相同,具體策略執行的演算法不同。下面以商場**的應用為場景簡要介紹策略模式的使用。並在最後和簡單工廠進一步結合,做更好的封裝,給使用者層面提供更簡單的操作。

#include

#include

#include

#include

using

namespace std;

//策略基類

template

<

class

mytype

>

class

strategy

mytype money_input;

private:}

;//打七折策略

template

<

class

mytype

>

//定義模板

class

strategy_7discount

:public strategy

private:}

;//打八折策略

template

<

class

mytype

>

//定義模板

class

strategy_8discount

:public strategy

private:}

;//滿減策略

template

<

class

mytype

>

//定義模板

class

strategy_oversub

:public strategy

private:}

;//定義乙個策略context

template

<

class

mytype

>

//定義模板

class

context

//上下文介面

mytype context_inte***ce()

private:}

;int

main

(void

)

執行結果:

打七折策略

最終的**是:218.4

----

----

----

----

----

----

----

----

----

----

----

----

----

----

----

--滿減策略

最終的**是:352

在之前**的基礎上增加乙個工廠類cashcontext。然後在main中使用工廠來做策略呼叫。

//定義乙個簡單工廠,來選擇使用哪個運算

template

<

class

mytype

>

//定義模板

class

cashcontext

strategy_t-

>money_input = money;

//設定入口引數

my_context =

new context

(strategy_t)

;//建立context策略物件

}//獲取結果

mytype get_result

(void

)private:}

;int

main

(void

)

執行結果:

打七折策略

最終的**是:316.4

簡單工廠模式和策略模式的最大區別是:簡單工廠模式注重返回的子類物件。策略模式注重執行策略方法的呼叫。簡單工廠模式和策略模式的配合使用會使**結構更加清晰。

c 實現策略模式

策略模式 strategy 它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。上面是 大話設計模式 中給出的定義,感覺這個概念給的不好,看了之後不能完全清晰明白該模式 可能自己水平太水的原因吧 在 effective c 中指出,策略模式是v...

策略模式 C 實現

include include include 問題 和工廠模式的本質區別?using namespace std abstract sort class strategy class class super sort virtual void sort int a,int l,int r conc...

C 策略模式實現

策略模式 它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用的客戶。strategy.cpp 定義控制台應用程式的入口點。include stdafx.h includeusing namespace std class strategy class co...