Strategy (C++实现)
// Strategy.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Strategy;
class Context
{
public:
Context(Strategy *pStrategy=NULL):m_pStrategy(pStrategy)
{
}
~Context()
{
}
void ContextInterface();
void setStrategy(Strategy* s)
{
m_pStrategy=s;
}
private:
Strategy* m_pStrategy;
};
class Strategy
{
public:
virtual ~Strategy(){}
virtual void AlgorithmInterface() = 0;
};
class ConcreateStrategyA
: public Strategy
{
public:
virtual ~ConcreateStrategyA(){}
virtual void AlgorithmInterface()
{
cout << "AlgorithmInterface Implemented by ConcreateStrategyA/n";
}
};
class ConcreateStrategyB
: public Strategy
{
public:
virtual ~ConcreateStrategyB(){}
virtual void AlgorithmInterface()
{
cout << "AlgorithmInterface Implemented by ConcreateStrategyB/n";
}
};
void Context::ContextInterface()
{
if (NULL != m_pStrategy)
{
m_pStrategy->AlgorithmInterface();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Strategy* pStrategyA = new ConcreateStrategyA();
Context* pContext = new Context(pStrategyA);
pContext->ContextInterface();
cout<<"========================"<<endl;
Strategy* pStrategyB = new ConcreateStrategyB();
pContext->setStrategy(pStrategyB);
pContext->ContextInterface();
delete pStrategyA;
delete pStrategyB;
delete pContext;
return 0;
}