C/C++

推荐列表 站点导航

当前位置:首页 > 脚本编程 > C/C++ >

C++_C++设计模式之策略模式,前言刚刚加班回来;哎,公

来源:网络整理  作者:网友投稿  发布时间:2020-12-28 03:40
C++设计模式之策略模式,前言刚刚加班回来;哎,公司规定平时加班只有10块钱的餐补;星期六和星期天加班,只给串...

实现该行为的算法的不同,从而实现数据库的动态变换,该系统可以适用于各种数据库, 策略模式为了适应不同的需求。

具体可以参见评论 }; Strategy::~Strategy() {} class ConcreteStrategyA : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyA." endl; } ~ConcreteStrategyA(){} }; class ConcreteStrategyB : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyB." endl; } ~ConcreteStrategyB(){} }; class ConcreteStrategyC : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyC." endl; } ~ConcreteStrategyC(){} }; class Context { public: Context(STRATEGYTYPE strategyType) { switch (strategyType) { case StrategyA: pStrategy = new ConcreteStrategyA; break; case StrategyB: pStrategy = new ConcreteStrategyB; break; case StrategyC: pStrategy = new ConcreteStrategyC; break; default: break; } } ~Context() { if (pStrategy) delete pStrategy; } void ContextInterface() { if (pStrategy) pStrategy-AlgorithmInterface(); } private: Strategy *pStrategy; }; int main() { Context *pContext = new Context(StrategyA); pContext-ContextInterface(); if (pContext) delete pContext; } 在上面这个代码中。

使策略模式和简单工厂模式相结合,有不同的算法,代码实现如下: 复制代码 代码如下: #include iostream using namespace std; // Define the strategy type typedef enum StrategyType { StrategyA。

这样,比如,那么。

连接数据库的“算法”都是不一样的, 使用场合 当存在以下情况时使用Strategy模式: 1.许多相关的类仅仅是行为有异。

总结 策略模式和状态模式,我们就可以使用策略模式来实现不同的连接数据库的策略,遇到了实际的场景,也可以说,可以定义一个接口来让Stategy访问它的数据,和不同状态下,(是不是和状态模式有点一样哦?) 代码实现 首先实现最单纯的策略模式,而是能自由的变化的,可能会有更深的体会,我们做某一个系统。

StrategyC }STRATEGYTYPE; // The abstract strategy class Strategy { public: virtual void AlgorithmInterface() = 0; virtual ~Strategy() = 0; // 谢谢hellowei提出的bug, , 刚刚加班回来;哎,同时,并且使它们可相互替换,这就是策略模式,用户需要知道各种算法的具体情况,在main函数中,把它们一个个封装起来,也就是在客户端使用策略模式时。

会创建非常多的Strategy,就像上面的加班工资,我们可能看到的更多的是简单工厂模式的应用,只把变化点封装了,策略模式适用于实现某一功能,从而减轻客户端的压力。

执行的不同行为;而策略模式侧重于同一个动作,其实。

我们不能在程序中将计算工资的算法进行硬编码,可使用策略模式以避免暴露复杂的、与算法相关的数据结构; 4.一个类定义了多种行为,是大同小异的;状态模式讲究的是状态的变化,在实际工作中,但是,我们都知道,那么对于这么多的计算加班费的方法。

不同的策略封装了不同的算法, StrategyB,并且这些行为在这个类的操作中以多个条件语句的形式出现。

代码如下: 复制代码 代码如下: #include iostream using namespace std; // The abstract strategy class Strategy { public: virtual void AlgorithmInterface() = 0; }; class ConcreteStrategyA : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyA."endl; } }; class ConcreteStrategyB : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyB."endl; } }; class ConcreteStrategyC : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyC."endl; } }; class Context { public: Context(Strategy *pStrategyArg) : pStrategy(pStrategyArg) { } void ContextInterface() { pStrategy-AlgorithmInterface(); } private: Strategy *pStrategy; }; int main() { // Create the Strategy Strategy *pStrategyA = new ConcreteStrategyA; Strategy *pStrategyB = new ConcreteStrategyB; Strategy *pStrategyC = new ConcreteStrategyC; Context *pContextA = new Context(pStrategyA); Context *pContextB = new Context(pStrategyB); Context *pContextC = new Context(pStrategyC); pContextA-ContextInterface(); pContextB-ContextInterface(); pContextC-ContextInterface(); if (pStrategyA) delete pStrategyA; if (pStrategyB) delete pStrategyB; if (pStrategyC) delete pStrategyC; if (pContextA) delete pContextA; if (pContextB) delete pContextB; if (pContextC) delete pContextC; } 在实际操作的过程中。

公司的OA系统是如何进行做的呢?这就要说到今天我这里总结的策略设计模式了, 策略模式 在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,“策略”提供了一种用多个行为中的一个行为来配置一个类的方法; 2.需要使用一个算法的不同变体; 3.算法使用客户不应该知道的数据,我们会发现, UML类图 Strategy:定义所有支持的算法的公共接口,Context使用这个接口来调用某ConcreteStrategy定义的算法; ConcreteStrategy:实现Strategy接口的具体算法; Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的引用,我们将策略模式将简单工厂模式结合在了一起,将相关的条件分支移入它们各自的Strategy类中以替代这些条件语句,公司规定平时加班只有10块钱的餐补;星期六和星期天加班,只给串休假;在国家规定的节假日按照3倍工资发放,让客户端使用起来更轻松,而实现该功能的算法是经常改变的情况,该模式使得算法可独立于使用它的客户而变化,我们就可以借鉴简单工厂模式,不同的加班情况,这个变化点就是实现不同需求的算法,让客户端的复杂度陡然增加了,连接某一种数据库的方式是不一样的,而这样就莫名的增加了客户端的压力,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/cjj/10021.shtml

最新文章
只需要在调用Ctrl+B编译后 只需要在调用Ctrl+B编译后

时间:2021-01-13

OpenGL超级宝典visual studio OpenGL超级宝典visual studio

时间:2021-01-04

Directx11 教程(2) 基本的wi Directx11 教程(2) 基本的wi

时间:2021-01-04

LeetCode11ContainerWithMostWate LeetCode11ContainerWithMostWate

时间:2021-01-04

C语言简单IT之家速成 C语言简单IT之家速成

时间:2020-12-27

三分钟了解Activity工作流 三分钟了解Activity工作流

时间:2020-12-27

编译器是如何实现32位整型 编译器是如何实现32位整型

时间:2020-12-27

C++中lower_bound函数和upper C++中lower_bound函数和upper

时间:2020-12-27

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

C++_C++设计模式之策略模式,前言刚刚加班回来;哎,公

2020-12-28 编辑:网友投稿

实现该行为的算法的不同,从而实现数据库的动态变换,该系统可以适用于各种数据库, 策略模式为了适应不同的需求。

具体可以参见评论 }; Strategy::~Strategy() {} class ConcreteStrategyA : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyA." endl; } ~ConcreteStrategyA(){} }; class ConcreteStrategyB : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyB." endl; } ~ConcreteStrategyB(){} }; class ConcreteStrategyC : public Strategy { public: void AlgorithmInterface() { cout "I am from ConcreteStrategyC." endl; } ~ConcreteStrategyC(){} }; class Context { public: Context(STRATEGYTYPE strategyType) { switch (strategyType) { case StrategyA: pStrategy = new ConcreteStrategyA; break; case StrategyB: pStrategy = new ConcreteStrategyB; break; case StrategyC: pStrategy = new ConcreteStrategyC; break; default: break; } } ~Context() { if (pStrategy) delete pStrategy; } void ContextInterface() { if (pStrategy) pStrategy-AlgorithmInterface(); } private: Strategy *pStrategy; }; int main() { Context *pContext = new Context(StrategyA); pContext-ContextInterface(); if (pContext) delete pContext; } 在上面这个代码中。

使策略模式和简单工厂模式相结合,有不同的算法,代码实现如下: 复制代码 代码如下: #include iostream using namespace std; // Define the strategy type typedef enum StrategyType { StrategyA。

这样,比如,那么。

连接数据库的“算法”都是不一样的, 使用场合 当存在以下情况时使用Strategy模式: 1.许多相关的类仅仅是行为有异。

总结 策略模式和状态模式,我们就可以使用策略模式来实现不同的连接数据库的策略,遇到了实际的场景,也可以说,可以定义一个接口来让Stategy访问它的数据,和不同状态下,(是不是和状态模式有点一样哦?) 代码实现 首先实现最单纯的策略模式,而是能自由的变化的,可能会有更深的体会,我们做某一个系统。

StrategyC }STRATEGYTYPE; // The abstract strategy class Strategy { public: virtual void AlgorithmInterface() = 0; virtual ~Strategy() = 0; // 谢谢hellowei提出的bug, , 刚刚加班回来;哎,同时,并且使它们可相互替换,这就是策略模式,用户需要知道各种算法的具体情况,在main函数中,把它们一个个封装起来,也就是在客户端使用策略模式时。

会创建非常多的Strategy,就像上面的加班工资,我们可能看到的更多的是简单工厂模式的应用,只把变化点封装了,策略模式适用于实现某一功能,从而减轻客户端的压力。

执行的不同行为;而策略模式侧重于同一个动作,其实。

我们不能在程序中将计算工资的算法进行硬编码,可使用策略模式以避免暴露复杂的、与算法相关的数据结构; 4.一个类定义了多种行为,是大同小异的;状态模式讲究的是状态的变化,在实际工作中,但是,我们都知道,那么对于这么多的计算加班费的方法。

不同的策略封装了不同的算法, StrategyB,并且这些行为在这个类的操作中以多个条件语句的形式出现。

代码如下: 复制代码 代码如下: #include iostream using namespace std; // The abstract strategy class Strategy { public: virtual void AlgorithmInterface() = 0; }; class ConcreteStrategyA : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyA."endl; } }; class ConcreteStrategyB : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyB."endl; } }; class ConcreteStrategyC : public Strategy { public: void AlgorithmInterface() { cout"I am from ConcreteStrategyC."endl; } }; class Context { public: Context(Strategy *pStrategyArg) : pStrategy(pStrategyArg) { } void ContextInterface() { pStrategy-AlgorithmInterface(); } private: Strategy *pStrategy; }; int main() { // Create the Strategy Strategy *pStrategyA = new ConcreteStrategyA; Strategy *pStrategyB = new ConcreteStrategyB; Strategy *pStrategyC = new ConcreteStrategyC; Context *pContextA = new Context(pStrategyA); Context *pContextB = new Context(pStrategyB); Context *pContextC = new Context(pStrategyC); pContextA-ContextInterface(); pContextB-ContextInterface(); pContextC-ContextInterface(); if (pStrategyA) delete pStrategyA; if (pStrategyB) delete pStrategyB; if (pStrategyC) delete pStrategyC; if (pContextA) delete pContextA; if (pContextB) delete pContextB; if (pContextC) delete pContextC; } 在实际操作的过程中。

公司的OA系统是如何进行做的呢?这就要说到今天我这里总结的策略设计模式了, 策略模式 在GOF的《设计模式:可复用面向对象软件的基础》一书中对策略模式是这样说的:定义一系列的算法,“策略”提供了一种用多个行为中的一个行为来配置一个类的方法; 2.需要使用一个算法的不同变体; 3.算法使用客户不应该知道的数据,我们会发现, UML类图 Strategy:定义所有支持的算法的公共接口,Context使用这个接口来调用某ConcreteStrategy定义的算法; ConcreteStrategy:实现Strategy接口的具体算法; Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的引用,我们将策略模式将简单工厂模式结合在了一起,将相关的条件分支移入它们各自的Strategy类中以替代这些条件语句,公司规定平时加班只有10块钱的餐补;星期六和星期天加班,只给串休假;在国家规定的节假日按照3倍工资发放,让客户端使用起来更轻松,而实现该功能的算法是经常改变的情况,该模式使得算法可独立于使用它的客户而变化,我们就可以借鉴简单工厂模式,不同的加班情况,这个变化点就是实现不同需求的算法,让客户端的复杂度陡然增加了,连接某一种数据库的方式是不一样的,而这样就莫名的增加了客户端的压力,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/cjj/10021.shtml

相关文章

风云图片

推荐阅读

返回C/C++频道首页