您的位置:首页 > 健康 > 美食 > asp和php的建站区别_自己在线制作logo免费模板_seo网站排名优化培训教程_网络营销推广方法十种

asp和php的建站区别_自己在线制作logo免费模板_seo网站排名优化培训教程_网络营销推广方法十种

2025/3/16 22:33:25 来源:https://blog.csdn.net/qq_43812868/article/details/146216632  浏览:    关键词:asp和php的建站区别_自己在线制作logo免费模板_seo网站排名优化培训教程_网络营销推广方法十种
asp和php的建站区别_自己在线制作logo免费模板_seo网站排名优化培训教程_网络营销推广方法十种

概念

策略模式是一种行为设计摸是,它的核心思想是将一些列的算法封装成独立的对象,并使它们可以相互替换,通过上下文进行调用。

策略模式通过算法抽象为独立的策略类,客户端可以根据自身需求选择不同的策略类来完成任务、这种方式使得算法的变化不会影响客户端代码。

适用场景

1、当使用对象使用一系列不同的算法,并在运行的时候需要进行动态切换,可以使用策略模式。

2、当有许多的仅在执行的时候一些行为不同,但是这些行为却有些类似的时候就可以使用策略模式。

3、隔离算法和业务逻辑,如果算法的逻辑在上下文中不是很重要,那么就可以使用策略模式将算法封装,实现算法和业务逻辑的隔离。

4、当使用了一系列同一算法的不同变体的时候,需要复杂的条件判断来执行对应的算法的时候,可以使用策略模式。减少业务逻辑的复杂度。

创建方式

1、策略模式需要创建立两个接口,一个是算法接口类,一个是上下文接口。

2、创建算法接口类,需要定义一个算法函数。

3、创建一个上下文接口,需要实现一个算法的引用对象,和一个是设置算法对象的函数,算法执行函数。

4、实现具体的事算法类,继承算法接口类,实现具体的算法实现。

5、实现具体的上下类,继承上下接口。实现接口中的函数。在实现定调用的函数的时候通过算法对象的引用调用算法函数。

6、在客户端使用的时候,先创建算法对象,之后创建上下文对象,在创建上下文对象的时候可以通过构造函数或者设置算法对象的函数将算法对象设置给上下文对象。之后调用上下文函数即可。

类关系图

在这里插入图片描述

示例代码

#include "CeLueMoShi.h"
int main()
{std::cout << "欢迎东哥来到设计模式的世界!\n";//创建策略类对象AlgorithmBase* add = new AddAlgorithm();AlgorithmBase* sub = new SubAlgorithm();AlgorithmBase* mul = new MulAlgorithm();//创建上下文类CeContext context;context.setAlgorith(add);int ret = context.callAlgorithm(5, 5);cout << "add : ret = " << ret << endl;context.setAlgorith(sub);ret = context.callAlgorithm(5, 5);cout << "sub : ret = " << ret << endl;context.setAlgorith(mul);ret = context.callAlgorithm(5, 5);cout << "mul : ret = " << ret << endl;
}
#pragma once//算法接口类
class AlgorithmBase
{
public:AlgorithmBase() {}~AlgorithmBase() {}virtual int algorithm(int a, int b) { return 0; }
};//具体算法类 + 
class AddAlgorithm : public AlgorithmBase {
public:AddAlgorithm() {}~AddAlgorithm() {}int algorithm(int a, int b) {return a + b;}};//具体算法类 - 
class SubAlgorithm : public AlgorithmBase {
public:SubAlgorithm() {}~SubAlgorithm() {}int algorithm(int a, int b) {return a - b;}};//具体算法类 * 
class MulAlgorithm : public AlgorithmBase {
public:MulAlgorithm() {}~MulAlgorithm() {}int algorithm(int a, int b) {return a * b;}};//上下文类,此处省略接口类
class CeContext {
public:CeContext() {}~CeContext() {}void setAlgorith(AlgorithmBase* alg) {m_alg = alg;}int callAlgorithm(int a,int b) {int ret = 0;if (m_alg) {ret = m_alg->algorithm(a, b);}return ret;}
private:AlgorithmBase* m_alg = nullptr;
};
欢迎东哥来到设计模式的世界!
add : ret = 10
sub : ret = 0
mul : ret = 25

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com