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;

}

 


目录
相关文章
使用vss(visual SourceSafe Explorer)检出项目
选择项目后 右键选择Get Latest Version 然后点击recursive(递归)按钮 点击ok 如果点击  VSS Get Latest Version 没有提示recursive(递归)的对话框,直接就是完成 或者提示你没有文件夹 是否创建 点击yes all然后也不会把所有文件 解决办法:按住Shift键 再获取就会弹出对话框,  然后设置“Only show this dialog when the Shift key is down”这个复选框不勾选。
1466 0
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
288 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
408 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
670 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
132 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1664 158