责任链模式

   初看到责任链模式,想到原来用MFC写程序响应函数可以在VIEW类中添加也可以在FRAME类中添加也可以在DOC类中添加。如果同时有添加,只优先响应其中一个。责任链的意图也就是使多个对象都由机会处理请求,从而避免请求的发送至和接受者之间耦合,是接受者形成一条责任链,要么自己处理要么交给后继者。又好像单位采购,部门可以审批一定数额的采购,总经理可以审批更多数额的采购。

   责任链适用的场景是当多个对象可以处理一个请求而不能预先确定,但也有可能一个请求没有被任何一个接受者处理。而在实现上并不复杂,接受者维护一个指向后继指针,同时确定自己的职责,即可以处理的请求。

   

   代码示例:

class handler {
public:
handler(bool isOk,handler* successor=NULL ){ _ok=isOk; _successor=successor; };
virtual void handle()=0;

protected:
 handler* _successor;  //后继者对象指针
 bool _ok;   //是否自己处理请求
};

class basicHandler : public handler {
public:
basicHandler(bool isOk, handler* succerros=NULL):handler(isOk,succerros){};
virtual void handle()
{
if(this->_ok){
printf("handled by basicHandler\n");
return ;
}
else if(_successor){
printf("leave it to others to handle\n");
_successor->handle();
return ;
}
};
};




int _tmain(int argc, _TCHAR* argv[])
{
basicHandler a(true);
basicHandler b(false,&a);
b.handle();
getchar();
return 0;
}

posted on 2012-05-03 21:22 Marv 阅读(233) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿

随笔档案

文章分类

搜索

最新评论

阅读排行榜

评论排行榜