设计模式复习-策略模式
生活随笔
收集整理的这篇文章主要介绍了
设计模式复习-策略模式
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
封装一系列算法,算法之间互相增加替换,不会影响到客户端,相当于是先定义一个统一接口,然后各个算法继承这个接口实现,然后,再层状一层逻辑调用,客户端只需要调用这个最后封装的类就好了,但是这样的话客户端在算法选择使用的时候需要自己实例化具体算法,所以可以考虑用工厂把这个策略类继续优化下即可。
实现代码(基本策略模式+工厂优化过的)
#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