物联网
您现在所在的位置:首页>企业动态>物联网

设计模式之策略模式

编辑:学到牛牛IT培训    发布日期: 2023-09-04 08:50:21  


策略模式,就提供一系列应对不同情况的策略算法封装供使用对象选择实施。比如商场针对不同节日的打折方案,疫情针对不同风险区域的管控措施等这些我们可以看成是不同情况的策略算法,我们都可以提供一个统一的策略类接口以应对不同情况策略的选择,这样做的优点在于不同策略算法切换方便,同时避免了同时使用多重条件判断而且易于扩展;缺点就是对于使用者需清楚策略算法以便其选择,另外就是当策略算法增加时策略类会较多从而使代码更加臃肿。

策略模式的UML简图:

1.jpg

下面我们就通过一个简单的事例代码来具体了解我们的策略模式:

1. 抽象策略类(对应UML图中的AbstractStrategy类)及其子类(具体策略类)的定义;

#include <iostream>


using namespace std;


//策略对外统一接口的抽象类

class Strategy

{

public:

    virtual void policy() = 0;   //策略算法的统一对外接口函数

};


//具体策略类: 疫情低风险策略

class LowRiskStrategy: public Strategy

{

public:

    virtual void policy()   //具体的策略实施方案算法

    {

        cout << "可自由进出" << endl;

    }

};


//具体策略类: 疫情中等风险策略

class MidRiskStrategy: public Strategy

{

public:

    virtual void policy()   //具体的策略实施方案算法

    {

        cout << "需凭48小时核酸检测进出" << endl;

    }

};


//具体策略类: 疫情高风险策略

class HighRiskStrategy: public Strategy

{

public:

    virtual void policy()   //具体的策略实施方案算法

    {

        cout << "需居家隔离,并每天检测核酸" << endl;

    }

};


2. 策略选择类(对应UML图中的Context类):

//实施选择策略的类: 区域类

class District

{

public:

    //这里可以在本类中提供Strategy类的指针接口,以方便本类对Strategy其他接口的调用,这里为了简单好理解比没提供

    void implementation(Strategy *stg)   //实施选择策略的接口

    {

        stg->policy();   //调用对应策略算法

    }

};


3. 主函数测试代码:


int main()

{

    District chunxilu;

HighRiskStrategy *highRisk = new HighRiskStrategy;

    LowRiskStrategy *lowRisk = new LowRiskStrategy;

cout << "春熙路升为高风险区域实施:";

chunxilu.implementation(highRisk);

cout << "春熙路降为低风险区域:";

    chunxilu.implementation(lowRisk);

    

    delete lowRisk;

    lowRisk = nullptr;

    delete highRisk;

    highRisk = nullptr;

    return 0;

}



4. 编译运行结果:

2.png

其实对于策略模式这里主要就策略抽象类和选择策略的对象类这两个类,其余具体的策略算法都是基于策略抽象类的扩展类,如代码里的低中高3个风险策略类。

注:这里为了方便大家对该设计模式结构的理解,故并没将类的定义与其接口定义分开(采用头文件与源文件的形式),大家在工程中实际使用时应当分开。


免费试学
课程好不好,不如实地听一听

推荐阅读

  • 计算机专业的就业难度怎么样?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 嵌入式软件开发学习路线

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • 为什么自学编程那么难?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

  • IT培训机构出来的到底好不好就业呢?

    国产午夜鲁丝片AV无码蜜臀,福利免费观看午夜体检区,人妻少妇精品无码专区APP,伊人久久大香线蕉成人综合网,国产妓女在线观看视频,亚洲成a人片在线观看尤物,亚洲精品国产一二三无码AV,亚汌国产一区二区三区

封闭学习

2

1

18180749853

蜀ICP备2021001672号

在线咨询 免费试听VIP课程