开发者社区> 涂作权> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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;

}

 



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
策略模式
场景:当不同条件调用不同的算法或者策略时。 优点:1.可以减少大量的if else,减少耦合度。 2.方便扩展和维护 缺点:1.类的数量变多,机构变复杂了。 2.向外暴露了策略
34 0
策略模式
定义 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。
715 0
策略模式
策略模式介绍 概述 所谓策略,指的是一个类的行为或其算法可以在运行时更改. 就像出行选择的交通工具,要根据自己的情况,可以自由切换自行车,汽车,火车等等. 三个角色 环境Context 持有策略strategy的引用,通过引用来调用某ConcreteStrategy定义的算法。
588 0
策略模式
策略模式 标签 : Java与设计模式 策略模式: 定义一系列的算法, 将其一个个封装起来, 并使它们可相互替换, 使得算法可独立于使用它的客户而变化.
910 0
+关注
涂作权
java,架构,编程语言相关专家
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载