C++:策略模式

策略模式:

定义一系列的算法,将它们封装起来。并且使他们互相可以替换,该模式可以使算法独立于他的客户而实现。

就像工资,不同的工作工资的算法不同,我们不能对工资算法硬性编码,应该是可以自由变化的,

在这里插入图片描述
Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法;
ConcreteStrategy:实现Strategy接口的具体算法;
Context:使用一个ConcreteStrategy对象来配置;维护一个对Stategy对象的引用,同时,可以定义一个接口来让Stategy访问它的数据。

使用场合

当存在以下情况时使用Strategy模式:

许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法;
需要使用一个算法的不同变体;
算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构;
一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以替代这些条件语句。



#include<iostream>
using namespace std;

class Strategy{
public :
    virtual void AlgorithmInterface() = 0;
};

class StrategyA : public Strategy{
public :
    void AlgorithmInterface(){
        cout<<"我来自策略模式A"<<endl;
    }
};

class StrategyB : public Strategy{
public :
    void AlgorithmInterface(){
        cout<<"我来自策略模式B"<<endl;
    }
};

class StrategyC :public Strategy{
public :
    void AlgorithmInterface(){
        cout<<"我来自策略模式C"<<endl;
    }
};
class Context{
public:
    Context(Strategy *pStrategy ):pStrategy(pStrategy){}
    void ContextInterface(){
        pStrategy->AlgorithmInterface();
    }
private :
    Strategy *pStrategy;
};

int main(){
    Strategy *pstrategyA = new StrategyA();
    Strategy *pstrategyB = new StrategyB();
    Strategy *pstrategyC = new StrategyC();
    Context *pcontextA = new Context(pstrategyA);
    Context *pcontextB = new Context(pstrategyB);
    Context *pcontextC = new Context(pstrategyC);
    pcontextA->ContextInterface();
    pcontextB->ContextInterface();
    pcontextC->ContextInterface();
    if(pstrategyA)delete pstrategyA;
    if(pstrategyB)delete pstrategyB;
    if(pstrategyC)delete pstrategyC;
    if(pcontextA)delete pcontextA;
    if(pcontextB)delete pcontextB;
    if(pcontextC)delete pcontextC;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章