日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式复习-策略模式

發布時間:2025/6/17 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式复习-策略模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

? ? ? ? 封裝一系列算法,算法之間互相增加替換,不會影響到客戶端,相當于是先定義一個統一接口,然后各個算法繼承這個接口實現,然后,再層狀一層邏輯調用,客戶端只需要調用這個最后封裝的類就好了,但是這樣的話客戶端在算法選擇使用的時候需要自己實例化具體算法,所以可以考慮用工廠把這個策略類繼續優化下即可。

實現代碼(基本策略模式+工廠優化過的)

#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; }

?

總結

以上是生活随笔為你收集整理的设计模式复习-策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。