大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
每一个handler保存了一个handler指针,用来指向下一个handler,形成一个handler链。
当一个handler收到一个request的时候,可以选择自己处理或者转给下一个handler处理。

#include <iostream>

using namespace std;


//抽象基类
class Handler
{
public:
    Handler(Handler 
* p): ph(p){}
    
virtual ~Handler() {delete ph;}
    
virtual void HandleRequest() = 0;

protected:
    
//下一个Handler
    Handler* ph;
}
;

//具体实现
class ConcreteHandlerA: public Handler
{
public:
    ConcreteHandlerA(Handler
* p = NULL):Handler(p){}
    
//如果没有下一个handler,则自己处理;否则转给下一个handler处理
    void HandleRequest()
    
{
        
if(ph)
        
{
            ph
->HandleRequest();
        }

        
else
        
{
            cout
<<"Request handled by A"<<endl;
        }

    }

}
;

//具体实现
class ConcreteHandlerB: public Handler
{
public:
    ConcreteHandlerB(Handler
* p = NULL):Handler(p){}
    
//如果没有下一个handler,则自己处理;否则转给下一个handler处理
    void HandleRequest()
    
{
        
if(ph)
        
{
            ph
->HandleRequest();
        }

        
else
        
{
            cout
<<"Request handled by B"<<endl;
        }

    }

}
;


int main()
{
    Handler
* pa = new ConcreteHandlerA;
    
//将A设置为B的下一个handler
    Handler* pb = new ConcreteHandlerB(pa);
    
//实际由A处理
    pb->HandleRequest();

    delete pb;
    
//delete pa;
    return 0;
}
posted on 2009-06-10 09:23 大胖 阅读(88) 评论(0)  编辑 收藏 引用 所属分类: Design Pattern

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理