策略模式-----C++实现

策略模式:

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

适用性:

1、  许多相关的类仅仅是行为有异。策略模式提供了一种用多个行为中的一个行为来配置一个类的方法。

2、  需要使用一个算法的多个变体。

3、  算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的,与算法相关的数据结构。

4、  一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的策略类中以代替这些条件语句。

 

结构图:

 策略模式-----C++实现

实现:

 

class Context;

//四则运算策略

class ArithmeticStrategy

{

public:

//把Context传给策略类,以便能方法所需要的数据

       virtual void Computing(Context *pContext) = 0;

       virtual~ArithmeticStrategy()

       { }

};

 

class Context

{

public:

       Context(inta, int b,ArithmeticStrategy *pStrategy)

       {

              m_valueA = a;

              m_valueB = b;

              m_pStrategy = pStrategy;

       }

//设置不同的策略

       voidSetStrategy(ArithmeticStrategy *pStrategy)

       {

              m_pStrategy = pStrategy;

       }

 

       voidOperation()

       {

              m_pStrategy->Computing(this);

       }

 

       intGetA()

       {

              returnm_valueA;

       }

 

       intGetB()

       {

              returnm_valueB;

       }

private:

       int  m_valueA;

       int  m_valueB;

       ArithmeticStrategy   *m_pStrategy;

};

//加法策略

class AddStrategy:publicArithmeticStrategy

{

public:

        void Computing(Context *pContext)

        {

               cout<<"AddStrategyCompute Result is : "<<

                      pContext->GetA()<< " + "<<pContext->GetB()<<" = "<<pContext->GetA() + pContext->GetB()<<endl;

        }

 

};

 

 

//减法策略

class SubStrategy:publicArithmeticStrategy

{

public:

       voidComputing(Context *pContext)

       {

              cout<<"SubStrategy Compute Result is : "<<

                     pContext->GetA()<<" - "<<pContext->GetB()<<" = "<<pContext->GetA() - pContext->GetB()<<endl;

       }

};

//乘法策略

class MulStrategy:publicArithmeticStrategy

{

public:

       voidComputing(Context *pContext)

       {

              cout<<"MulStrategy Compute Result is : "<<

                     pContext->GetA()<<" * "<<pContext->GetB()<<" = "<<pContext->GetA() * pContext->GetB()<<endl;

       }

};

//除法策略,这里仅仅做简单的例子,就不判断除数是否为0了

class DivStrategy:publicArithmeticStrategy

{

public:

       voidComputing(Context *pContext)

       {

              cout<<"DivStrategy Compute Result is : "<<

                     pContext->GetA()<<" / "<<pContext->GetB()<<" = "<<((double)pContext->GetA() /pContext->GetB())<<endl;

       }

};

 策略模式-----C++实现

策略模式-----C++实现

上一篇:skip list跳表C语言代码。


下一篇:linux下c++打印