#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
class Strategy
{
protected:
string name;
public:
explicit Strategy(string str):name(str){}
virtual ~Strategy(){cout<<name<<"Strategy基类析构"<<endl;}
virtual void Do()=0;
};
class StrategyConcreteA:public Strategy
{
public:
StrategyConcreteA(string str):Strategy(str){}
virtual ~StrategyConcreteA(){cout<<name<<" StrategyConcreteA类析构"<<endl;}
virtual void Do(){cout<<name<<" StrategyConcreteA do sth."<<endl;}
};
class StrategyConcreteB:public Strategy
{
public:
StrategyConcreteB(string str):Strategy(str){}
virtual ~StrategyConcreteB(){cout<<name<<" StrategyConcreteB类析构"<<endl;}
virtual void Do(){cout<<name<<" StrategyConcreteB do sth."<<endl;}
};
class Context
{
Strategy* m_Strategy;
public:
Context(Strategy* pStr):m_Strategy(pStr){}
virtual ~Context(){
if(m_Strategy != NULL)
cout<<"Context 析构"<<endl;
delete m_Strategy;
}
void DoAction(){
m_Strategy->Do();
}
};
void Do(Context* pCon)
{
pCon->DoAction();
delete pCon;
}
int main(int argc, char *argv[])
{
cout<<"---------------------------------"<<endl;
Do(new Context(new StrategyConcreteA(string("zxn"))));
cout<<"---------------------------------"<<endl;
Do(new Context(new StrategyConcreteB(string("zmn"))));
cout<<"---------------------------------"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
本文通过C++代码展示了策略模式的具体实现过程。该示例包括基类Strategy及两个具体策略类StrategyConcreteA与StrategyConcreteB,同时定义了Context类来使用这些策略。主函数中通过传递不同的策略实例给Context对象,演示了如何根据不同策略执行相应的行为。
1831

被折叠的 条评论
为什么被折叠?



