#pragma once
#ifndef STRATEGY_H
#define STRATEGY_H
class Strategy;
class Context
{
public:
Context(Strategy *pStrategy);
~Context();
void ContextInterface();
private:
Strategy* m_pStrategy;
};
class Strategy
{
public:
virtual ~Strategy(){}
virtual void AlgorithmInterface() = 0;
virtual Strategy* SwitchAlgorithm() = 0;
};
class ConcreateStrategyA : public Strategy
{
public:
virtual ~ConcreateStrategyA(){}
virtual void AlgorithmInterface();
virtual Strategy* SwitchAlgorithm();
};
class ConcreateStrategyB : public Strategy
{
public:
virtual ~ConcreateStrategyB(){}
virtual void AlgorithmInterface();
virtual Strategy* SwitchAlgorithm();
};
#endif
#include "StdAfx.h"
#include "strategy_impl.h"
#include
#include
using namespace std;
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();
Strategy* pTmp = m_pStrategy->SwitchAlgorithm();
delete m_pStrategy;
m_pStrategy = pTmp;
}
}
void ConcreateStrategyA::AlgorithmInterface()
{
std::cout
1659628745
查看更多评论