策略模式C++实现

#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;
}
posted @ 2020-05-05 21:08  麻辣猪仔  阅读(149)  评论(0)    收藏  举报