首页 > 编程语言 > 详细

策略模式C++实现

时间:2020-05-05 20:26:52      阅读:74      评论:0      收藏:0      [点我收藏+]
#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;
}

策略模式C++实现

原文:https://www.cnblogs.com/wstong/p/12832443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!