首页 > 编程语言 > 详细

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

时间:2014-02-12 01:19:16      阅读:299      评论:0      收藏:0      [点我收藏+]

策略模式:

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

适用性:

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

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

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

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

 

结构图:

 bubuko.com,布布扣

实现:

 

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;

       }

};

 bubuko.com,布布扣

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

原文:http://blog.csdn.net/hai200501019/article/details/19084493

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!