標籤:需要 策略 col png 演算法 log nload logs exe
模式定義:策略模式定義了演算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶。
舉個例子來説,不同鴨子的行爲是不同的,我們可以把變化的行爲提取出來進行封裝。我將鴨子的飛行行爲(有的鴨子根本不會飛)和叫法行爲提取出來,定義成飛行的演算法族(飛行)。對飛行行爲來說,他的飛行行爲定義為介面(CInterface_Fly),不同的具體飛行方法定義為不同的子類(FlyNoWay、FlyWithWings),都需要實現飛行行爲方法(fly)。鴨子的父類中維護了飛行行爲的指針。在構造具體的鴨子子類(RedHeadDuck)時,將對應的飛行子類傳入,便成實現具體鴨子的飛行行爲。同理,對鴨子的叫法也是一樣的處理,定義成叫法演算法組。
模式結構:
源碼:
1 #ifndef CDUCK_H 2 #define CDUCK_H 3 class CInterface_fly; 4 class CInterface_quak; 5 6 class CDuck 7 { 8 public: 9 CDuck();10 virtual ~CDuck();11 12 public:13 virtual void performFly();14 virtual void performQuak();15 public:16 virtual void setFlyBehavior(CInterface_fly* pInterfaceFly);17 virtual void setQuackBehavior(CInterface_quak* pInterfaceQuak);18 19 protected:20 CInterface_fly* m_pInterface_fly;21 CInterface_quak* m_pInterface_quak;22 23 };24 25 #endif // CDUCK_H
1 #include "duck.h" 2 #include <interface_fly.h> 3 #include <interface_quak.h> 4 #include <QDebug> 5 CDuck::CDuck() 6 { 7 8 } 9 CDuck::~CDuck()10 {11 12 }13 void CDuck::setFlyBehavior(CInterface_fly* pInterfaceFly)14 {15 m_pInterface_fly = pInterfaceFly;16 }17 void CDuck::setQuackBehavior(CInterface_quak* pInterfaceQuak)18 {19 m_pInterface_quak = pInterfaceQuak;20 }21 void CDuck::performFly()22 {23 if(m_pInterface_fly)24 {25 m_pInterface_fly->fly();26 }27 }28 void CDuck::performQuak()29 {30 if(m_pInterface_quak)31 {32 m_pInterface_quak->quak();33 }34 }
1 #include <QCoreApplication> 2 #include <redheadduck.h> 3 #include <duck.h> 4 #include "interface_fly.h" 5 #include "interface_quak.h" 6 #include "flywithwings.h" 7 #include "squeak.h" 8 int main(int argc, char *argv[]) 9 {10 QCoreApplication a(argc, argv);11 CInterface_fly* pInterface_fly = new FlyWithWings();12 CInterface_quak* pInterface_quak = new Squeak();13 CDuck* pDuck = new RedHeadDuck();14 pDuck->setFlyBehavior(pInterface_fly);15 pDuck->setQuackBehavior(pInterface_quak);16 pDuck->performFly();17 pDuck->performQuak();18 return a.exec();19 }
源碼下載:http://download.csdn.net/download/gongchao1212/10006758
參考資料:
HeadFirst 設計模式
C++設計模式——策略模式