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;

}

 


目录
相关文章
|
4月前
|
算法 数据安全/隐私保护
行为型 策略模式
行为型 策略模式
18 1
|
8月前
|
设计模式 算法 Java
什么场景要使用策略模式,什么场景不能使用?
如果,让我来设计,我最先想到的就是策略模式。另外,我把往期面试题解析的配套文档我已经准备好,想获得的可以在我的煮叶简介中找到。那么什么场景要使用策略模式,什么场景又不应该使用策略模式呢?我们可以先来看官方对策略模式的定义。
108 0
|
8月前
|
前端开发
策略模式
策略模式
53 0
|
9月前
|
设计模式 算法
策略模式详细介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到具有共同接口的独立类中,使得它们可以互相替换。策略模式可以让算法的变化独立于使用它的客户端。
94 0
|
9月前
|
算法 测试技术 C#
C#策略模式
C#策略模式
40 0
|
10月前
|
设计模式 前端开发
关于策略模式我所知道的
关于策略模式我所知道的
56 0
|
10月前
|
算法 程序员 开发工具
简单说说我对策略模式的了解
简单说说我对策略模式的了解
62 0
|
设计模式 算法
我学会了,策略模式
策略模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
96 0
我学会了,策略模式