策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算

法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。

策略模式由三个角色组成:

1) 算法使用环境(Context)角色:算法被引用到这里和一些其它的与环境有关的操作一起

来完成任务。

2) 抽象策略(Strategy)角色:规定了所有具体策略角色所需的接口。在java 它通常由接口

或者抽象类来实现。

3) 具体策略(Concrete Strategy)角色:实现了抽象策略角色定义的接口。

class Strategy

{

public:

     virtual ~Strategy(){}

 

     virtual void AlgorithmInterface() = 0;

};

 

class ConcreateStrategyA

     : public Strategy

{

public:

     virtual ~ConcreateStrategyA(){}

 

     virtual void AlgorithmInterface();

};

 

class Context

{

public:

     Context(Strategy *pStrategy);

     ~Context();

 

     void ContextInterface();

private:

     Strategy* m_pStrategy;

};

 

Context::Context(Strategy *pStrategy)

     : m_pStrategy(pStrategy)

{

}

 

Context::~Context()

{

     delete m_pStrategy;

     m_pStrategy = NULL;

}

 

void Context::ContextInterface()

{

     if (NULL != m_pStrategy)

     {

         m_pStrategy->AlgorithmInterface();

     }

}

 

void ConcreateStrategyA::AlgorithmInterface()

{

     std::cout << "AlgorithmInterface Implemented by ConcreateStrategyA\n";

}

int main()

{

     Strategy* pStrategy = new ConcreateStrategyA();

     ContextpContext = new Context(pStrategy);

 

     pContext->ContextInterface();

 

     delete pContext;

 

     return 0;

}

posted on 2012-01-11 19:54 柳清风 阅读(171) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


统计