2.策略模式

简介: 1策略模式的核心内容是: A:包含策略的抽象类 B:不同的策略分别实现 C:策略控制器,通过这个策略控制器实现调度控制策略。 2策略模式的作用是根据传递进去的参数不同,实现调度执行不同的策略。 3策略模式具体描述 策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,   从而使得它们可以相互替换。策略模式使得算法可

1策略模式的核心内容是:

A:包含策略的抽象类

B:不同的策略分别实现

C:策略控制器,通过这个策略控制器实现调度控制策略。

2策略模式的作用是根据传递进去的参数不同,实现调度执行不同的策略。

3策略模式具体描述

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,

 

从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下

 

发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类,

 

各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,

修改都不会影响到环境和客户端。

 

跟不同类型的MM约会,要用不同的策略,有的请电影比较好,

有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到MM的芳心,

我的追MM锦囊中有好多Strategy哦。

 

策略的抽象类,接口,抽象类的指针可以访问所有子类对象,(纯虚函数)

实现的各种策略,各种策略的实现类,都必须继承抽象类

策略的设置接口类,设置不同策略

4.策略模式类图

5.代码:

#include<iostream>

#include<cmath>

#include <string>

using namespace std;

//策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,

 

//从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下

 

//发生变化。策略模把行为和环境分开。环境类负责维持和查询行为类,

 

//各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,

//修改都不会影响到环境和客户端。

//

//跟不同类型的MM约会,要用不同的策略,有的请电影比较好,

//有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到MM的芳心,

//我的追MM锦囊中有好多Strategy哦。

 

//策略的抽象类,接口,抽象类的指针可以访问所有子类对象,(纯虚函数)

//实现的各种策略,各种策略的实现类,都必须继承抽象类

//策略的设置接口类,设置不同策略

 

//收钱的抽象类,也就是策略的抽象类

class CashSuper

{

public:

    //收钱的纯虚函数

    virtual double acceptMoney(double money) = 0;

};

 

//正常收钱的策略

class CashNormal :public CashSuper

{

public:

    //正常收钱

    double acceptMoney(double money)

    {

        return money;

    }

};

 

//打折的策略

class CashRebate :public CashSuper

{

private:

    double discount;

public:

    //折扣

    CashRebate(double dis)

    {

        discount = dis;

    }

    //收钱

    double acceptMoney(double money)

    {

        //折扣

        return money*discount;

    }

};

 

//返现的策略

class CashReturn :public CashSuper

{

private:

    double moneyCondition;

    double moneyReturn;

public:

    //花多少钱,返回多少钱

    CashReturn(double mc, double mr)

    {

        moneyCondition = mc;

        moneyReturn = mr;

    }

    //收钱,返款

    double acceptMoney(double money)

    {

        double result = money;

        if (money >= moneyCondition)

        {

            result = money - floor(money / moneyCondition)*moneyReturn;

        }

        return result;

    }

};

 

//策略的控制类

class  CashContext

{

private:

    CashSuper *cs;

public:

    CashContext(string str)//设置策略

    {

        if (str == "正常收费")

        {

            cs = new CashNormal();

        }

        else if (str == "9")

        {

            cs = new CashRebate(0.9);

        }

        else if (str == "1000200")

        {

            cs = new CashReturn(1000, 200);

        }

    }

    double getResult(double money)

    {

        return cs->acceptMoney(money);

    }

};

 

int main()

{

    double money = 1000;

    //可以改变下面括号中的值,如果是下面的的一句,运行结果是800

    //CashContext *cc = new CashContext("1000200");

    //若是下面这句,显示的是1000

    //CashContext *cc = new CashContext("正常收费");

    //下面的这句的意思是打九折,运行结果是:900

    CashContext *cc = new CashContext("9");

   

    cout << cc->getResult(money);

    cin.get();

    return 0;

}

 


目录
相关文章
|
3天前
|
人工智能 运维 安全
|
1天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
775 109
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
313 5
|
2天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
3天前
|
机器学习/深度学习 传感器 算法
Edge Impulse:面向微型机器学习的MLOps平台——论文解读
Edge Impulse 是一个面向微型机器学习(TinyML)的云端MLOps平台,致力于解决嵌入式与边缘设备上机器学习开发的碎片化与异构性难题。它提供端到端工具链,涵盖数据采集、信号处理、模型训练、优化压缩及部署全流程,支持资源受限设备的高效AI实现。平台集成AutoML、量化压缩与跨硬件编译技术,显著提升开发效率与模型性能,广泛应用于物联网、可穿戴设备与边缘智能场景。
176 127