// Defines the entry point for the console application.
//
#include "stdafx.h"
#include "ConcreteStrategy.h"
#include "Context.h"
int main(int argc, char* argv[])
{
//printf("Hello World!\n");
//用哪种算法由客户确定
ConcreteStrategy_A strategyA;
ConcreteStrategy_B strategyB;
//使用A策略
Context context(&strategyA);
context.Run();
//动态更改为B策略
context.SetStrategy(&strategyB);
context.Run();
//更改回A策略
context.SetStrategy(&strategyB);
context.Run();
return 0;
}
#ifndef _CONTEXT_H_
#define _CONTEXT_H_
#include "strategy.h"
class Context
{
private:
strategy *p_strategyObj;
public:
Context(strategy *p_strategyObj);
~Context();
void Run();
void SetStrategy(strategy *p_strategyObj);
};
#endif/*_CONTEXT_H_*/
//
#include "stdafx.h"
#include "Context.h"
Context::Context(strategy *p_strategyObj)
{
//TODO:ADD CONTEXT INIT
printf("Create Context Object!\n");
Context::p_strategyObj = p_strategyObj;
}
Context::~Context()
{
//TODO:ADD CONTEXT END
printf("Del Context Object!\n");
}
void Context::Run()
{
//CALL STRATEGY
// printf("Call Algorithm!\n");
p_strategyObj->AlgorithmInterface();
}
void Context::SetStrategy(strategy *p_strategyObj)
{
printf("modify strategy!\n");
Context::p_strategyObj = p_strategyObj;
}
#ifndef _STRATEGY_H_
#define _STRATEGY_H_
class strategy{
private:
public:
strategy(){};
~strategy(){};
virtual void AlgorithmInterface() = 0;
};
#endif/*_STRATEGY_H_*/
#ifndef _CONCRETE_STRATEGY_H_
#define _CONCRETE_STRATEGY_H_
#include "strategy.h"
class ConcreteStrategy_A:public strategy{
private:
public:
ConcreteStrategy_A();
~ConcreteStrategy_A();
void AlgorithmInterface();
};
class ConcreteStrategy_B:public strategy{
private:
public:
ConcreteStrategy_B();
~ConcreteStrategy_B();
void AlgorithmInterface();
};
#endif/*CONCRETE_STRATEGY_H_*/
// ConcreteStrategy.cpp : concrete strategy class
//
#include "stdafx.h"
#include "ConcreteStrategy.h"
ConcreteStrategy_A::ConcreteStrategy_A()
{
//TODO:ADD INIT
printf("Create ConcreteStrategy_A Object!\n");
}
ConcreteStrategy_A::~ConcreteStrategy_A()
{
//TODO ADD END
printf("Del ConcreteStrategy_A Object!\n");
}
void ConcreteStrategy_A::AlgorithmInterface()
{
printf("Useing algorithm A!\n");
}
ConcreteStrategy_B::ConcreteStrategy_B()
{
//TODO:ADD INIT
printf("Create ConcreteStrategy_B Object!\n");
}
ConcreteStrategy_B::~ConcreteStrategy_B()
{
//TODO:ADD END
printf("Del ConcreteStrategy_B Object!\n");
}
void ConcreteStrategy_B::AlgorithmInterface()
{
printf("Useing algorithm B!\n");
}
完整的工程代码请到网址 http://download.youkuaiyun.com/detail/apn172/4952123下载
1万+



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



