您的位置:首页 > 编程语言 > C语言/C++

设计模式的解析和实现(C++)之十六-Strategy模式

2012-11-12 16:57 621 查看
作用:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

解析:

简而言之一句话,Strategy模式是对算法的封装。处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了。

实现:

1)Strategy.h

#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;

};

class ConcreateStrategyA

    : public Strategy

{

public:

    virtual ~ConcreateStrategyA(){}

    virtual void AlgorithmInterface();

};

#endif

2)Strategy.cpp

#include <iostream>

#include "Strategy.h"

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();

    }

}

void ConcreateStrategyA::AlgorithmInterface()

{

    std::cout << "AlgorithmInterface Implemented by ConcreateStrategyAn";

}

3)Main.cpp
#include "Strategy.h"

int main()

{

    Strategy* pStrategy = new ConcreateStrategyA();

    Context*  pContext  = new Context(pStrategy);

    pContext->ContextInterface();

    delete pContext;

    return 0;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: