设计模式复习-策略模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式复习-策略模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
? ? ? ? 封裝一系列算法,算法之間互相增加替換,不會影響到客戶端,相當于是先定義一個統一接口,然后各個算法繼承這個接口實現,然后,再層狀一層邏輯調用,客戶端只需要調用這個最后封裝的類就好了,但是這樣的話客戶端在算法選擇使用的時候需要自己實例化具體算法,所以可以考慮用工廠把這個策略類繼續優化下即可。
實現代碼(基本策略模式+工廠優化過的)
#pragma once #include "stdafx.h" #include<iostream> #include<windows.h> using namespace std;//策略模式基本實現 class InterFace { public:virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0; };class Addition : public InterFace { public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA + numberB;} };class Subtrantion :public InterFace { public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA - numberB;} };class Strategy { private:InterFace *mpAlgorithm = NULL; public:VOID setStrategy(InterFace *pAlgorithm) {mpAlgorithm = pAlgorithm;}DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {return mpAlgorithm->getValue(numberA , numberB);} };//策略模式客戶端調用 int main() {Strategy *pstrategy = new Strategy();InterFace *padditon = new Addition();InterFace *psubtrantion = new Subtrantion();pstrategy->setStrategy(padditon);cout<<pstrategy->runAlgorithm(1,1)<<endl;pstrategy->setStrategy(psubtrantion);cout << pstrategy->runAlgorithm(1, 1) << endl;delete pstrategy;delete padditon;delete psubtrantion;getchar();return 0; }#pragma once #include "stdafx.h" #include<iostream> #include<windows.h> using namespace std;//工廠簡單改下策略模式,減少客戶端操作(選擇)的復雜度 class InterFace { public:virtual DWORD getValue(const DWORD &numberA ,const DWORD &numberB) = 0; };class Addition : public InterFace { public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA + numberB;} };class Subtrantion :public InterFace { public:DWORD getValue(const DWORD &numberA, const DWORD &numberB) {return numberA - numberB;} };class Strategy { private:InterFace *mpNowAlgorithm = NULL;InterFace *mpCacheAlgorithm[2] = {NULL ,NULL};public:Strategy() {mpCacheAlgorithm[0] = new Addition();mpCacheAlgorithm[1] = new Subtrantion();}VOID setStrategy(const DWORD &key) {switch (key) {case 0: mpNowAlgorithm = mpCacheAlgorithm[0]; break;case 1:mpNowAlgorithm = mpCacheAlgorithm[1]; break;default:mpNowAlgorithm = NULL;}}~Strategy() {delete mpCacheAlgorithm[0];delete mpCacheAlgorithm[1];}DWORD runAlgorithm(const DWORD &numberA ,const DWORD &numberB) {return mpNowAlgorithm->getValue(numberA , numberB);} };//策略模式客戶端調用 int main() {Strategy *pstrategy = new Strategy();pstrategy->setStrategy(0);cout<<pstrategy->runAlgorithm(1,1)<<endl;pstrategy->setStrategy(1);cout << pstrategy->runAlgorithm(1, 1) << endl;delete pstrategy;getchar();return 0; }?
總結
以上是生活随笔為你收集整理的设计模式复习-策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络与机器学习 笔记—反向传播算法(
- 下一篇: 神经网络与机器学习 笔记—单神经元解决X