#include <iostream>
using namespace std;
class Strategy;
class Context {
public:
Context(Strategy* pStrategy);
virtual ~Context();
virtual void algorithm();
private:
Strategy* m_pStrategy;
};
class Strategy {
public:
Strategy() {}
virtual ~Strategy() {}
virtual void algorithm() = 0;
};
class ConcreteStrategyA : public Strategy {
public:
ConcreteStrategyA() {}
virtual ~ConcreteStrategyA() {}
virtual void algorithm();
};
class ConcreteStrategyB : public Strategy {
public:
ConcreteStrategyB() {}
virtual ~ConcreteStrategyB() {}
virtual void algorithm();
};
// Context
Context::Context(Strategy* pStrategy) {
m_pStrategy = pStrategy;
}
Context::~Context() {
if (!m_pStrategy) delete m_pStrategy;
}
void Context::algorithm() {
m_pStrategy->algorithm();
}
// ConcreteStrategyA
void ConcreteStrategyA::algorithm() {
cout << "I‘m ConcreteStrategyA‘s algorithm" << endl;
}
// ConcreteStrategyB
void ConcreteStrategyB::algorithm() {
cout << "I‘m ConcreteStrategyB‘s algorithm" << endl;
}
int main() {
Strategy* pStrategy = new ConcreteStrategyA();
Context* pContext = new Context(pStrategy);
(*pContext).algorithm();
pStrategy = new ConcreteStrategyB();
pContext = new Context(pStrategy);
(*pContext).algorithm();
return 0;
}
原文:https://www.cnblogs.com/wstong/p/12832443.html