行为型 策略模式

简介: 行为型 策略模式

策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。(一组相同功能的不同策略,用其中一个就好)

创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。

策略对象改变context对象的执行算法。如:旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。

策略模式:

逻辑分析:

多种方案,多种组合方案中选择一种的场景时。

使用场景:

打折策略的选择,多种打折方案只能用一种

算法实现/加密方式策略的选择,多种算法选择,只需要其中一种

如:旅游时出行方案选择其中一种

源码demo:

例如:打折策略的实现:

/********************************************************************************************
策略模式:
    将一系列策略进行封装,客户根据需求去调用相应的策略,实现很方便,后续添加策略时,只需继承接口并实现该策略
    1.创建策略类,不同的策略去继承同一个接口函数
    2.将策略组成一个算法本
    1.持有接口函数的指针,根据条件选择具体的算法,完成策略接口的赋值
    2.调用策略执行函数,在执行函数中完成具体的算法,在外界看来调用同一个函数接口可以执行不同的策略
***********************************************************************************************/
#include<iostream>
using namespace std;
class Strategy
{
public:
    virtual void discount() = 0;
};
class five : public Strategy
{
public:
    virtual void discount()
    {
        cout << "打5折" << endl;
    }
};
class six : public Strategy
{
public:
    virtual void discount()
    {
        cout << "打6折" << endl;
    }
};
class Context
{
public:
    Context(Strategy *strategy)
    {
        this->p = strategy;
    }
    void Operator()
    {
        p->discount();
    }
private:
    Strategy *p;
};
int main()
{
    Strategy *strategy = new five();//创建具体的算法对象
    Context *p = new Context(strategy);//扔向算法目录
    p->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
    delete strategy;
    delete p;
    Strategy *strategy1 = new six();//创建具体的算法对象
    Context *p1 = new Context(strategy1);//扔向算法目录
    p1->Operator();//指针指向哪个算法,那么此指针调用的就是谁的算法
    delete strategy1;
    delete p1;
    // system("pause");
    return 0;
}

思考:如何更好得实现策略模式,用策略模式解决更多更好得场景。

目录
相关文章
|
7月前
|
设计模式 算法 测试技术
行为型设计模式01-策略模式
行为型设计模式01-策略模式
21 0
|
9月前
|
前端开发
策略模式
策略模式
55 0
|
9月前
|
设计模式 算法 Java
设计模式-行为型模式:策略模式
设计模式-行为型模式:策略模式
|
10月前
|
设计模式 算法
策略模式详细介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到具有共同接口的独立类中,使得它们可以互相替换。策略模式可以让算法的变化独立于使用它的客户端。
95 0
|
10月前
|
算法 测试技术 C#
C#策略模式
C#策略模式
40 0
|
11月前
|
设计模式 前端开发
关于策略模式我所知道的
关于策略模式我所知道的
58 0
|
11月前
|
算法 程序员 开发工具
简单说说我对策略模式的了解
简单说说我对策略模式的了解
62 0
|
算法 Java 程序员
行为型模式-模板方法模式
行为型模式-模板方法模式
77 0