#include <iostream>
#include <string>
using namespace std;
typedef enum StrategyTypeTag
{
strategyA,
strategyB,
}StrategyType;
class Strategy{
public:
virtual void AlgorithmInterface() = 0;
};
//具体策略 StrategyA
class StrategyA : public Strategy{
public:
void AlgorithmInterface(){
cout << "实现A算法" <<endl;
}
};
class StrategyB : public Strategy{
public:
void AlgorithmInterface() {
cout << "实现B算法" << endl;
}
};
class Context{
public:
Context(Strategy *pStrategy):pStrategy(pStrategy){}
void ContextInterface(){
pStrategy->AlgorithmInterface();
}
private:
Strategy *pStrategy;
};
class Factory{
public:
Strategy* CreateStrategy(StrategyType type)
{
switch(type)
{
case strategyA:
return new StrategyA();
case strategyB:
return new StrategyB();
default:
return NULL;
}
}
};
int main(){
Factory *pFactory = new Factory();
Strategy *pstrategya = pFactory->CreateStrategy(strategyA);
Strategy *pstrategyb = pFactory->CreateStrategy(strategyB);
Context *pcontexta = new Context(pstrategya);
Context *pcontextb = new Context(pstrategyb);
pcontexta->ContextInterface();
pcontextb->ContextInterface();
if(pFactory)delete pFactory;
if(pstrategya)delete pstrategya;
if(pstrategyb)delete pstrategyb;
if(pcontexta)delete pcontexta;
if(pcontextb)delete pcontextb;
return 0;
}
C++简单工厂模式和策略模式实例
最新推荐文章于 2024-07-25 12:39:48 发布