现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

代码版设计模式19:职责链模式【行为型】

2013-03-08 12:21 工业·编程 ⁄ 共 1450字 ⁄ 字号 暂无评论

#include <iostream>
using namespace std;

//
struct IManager
{
public:
    IManager(IManager *pHighLevelManager) : m_pHighLevelManager(pHighLevelManager) { }
    virtual ~IManager() { }

    virtual void dealWithRequest(int num) = 0;

protected:
    IManager *m_pHighLevelManager;
};

class CCommonManager : public IManager
{
public:
    CCommonManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { }
    virtual ~CCommonManager() { }

    virtual void dealWithRequest(int num)
    {
        if(num <= 500)
        {
            cout<<"common manager deal with request."<<endl;
        }
        else
        {
            m_pHighLevelManager->dealWithRequest(num);
        }
    }
};

class CMajorManager : public IManager
{
public:
    CMajorManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { }
    virtual ~CMajorManager() { }

    virtual void dealWithRequest(int num)
    {
        if(num <= 1000)
        {
            cout<<"major manager deal with request."<<endl;
        }
        else
        {
            m_pHighLevelManager->dealWithRequest(num);
        }
    }
};

class CTopManager : public IManager
{
public:
    CTopManager(IManager *pHighLevelManager) : IManager(pHighLevelManager) { }
    virtual ~CTopManager() { }

    virtual void dealWithRequest(int num)
    {
        cout<<"top manager deal with request."<<endl;
    }
};

//
void main()
{
    CTopManager topManager(NULL);
    CMajorManager majorManager(&topManager);
    CCommonManager commonManager(&majorManager);

    commonManager.dealWithRequest(300);
    commonManager.dealWithRequest(800);
    commonManager.dealWithRequest(3000);
}

给我留言

留言无头像?