欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 编程语言 > asp.net >内容正文

asp.net

设计模式的理解: 职责链模式 (chain of responsibility) -ag凯发k8国际

发布时间:2024/10/14 asp.net 28 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 设计模式的理解: 职责链模式 (chain of responsibility) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

       职责链模式(chain of responsibility pattern),为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

      简言之,当有一个请求发送时,有一群对象可以按照优先级接受这些请求。职责链模式就是通过链表的形式完成下面操作,在现在来看这种实现方法有点落后,但是放在1994年还是很有指导意义的。

       

 

在图形界面程序中有些控件可以触发单机事件,例如

一个winform 窗体上放了一个  控件组groupbox   ,控件组上放了一个label 标签控件。我们设置 label 标签 和 groupbox 控件组没有单击不发生作用,当单击label时,单击请求自上而下的传递到winform中触发winform 窗体的单击事件:

class requset{ private:string msg_; public:requset(){msg_ ="点击请求";}string getmsg(){return msg_;}; }/****这个类时重点****/ class chainhandler{chainhandler * nexthandler;void sendrequesttonexthandler (const requset & rq){if(nexthandler !=nullptr){nexthandler->handle(rq);}}protected:virtual bool canhandlerequest() = 0;virtual void handleprocess(const requset & rq)=0; public:chainhandler(){nexthandler =nullptr;}void setnexthandler(chainhandler * next){nexthandler=next;}void handle(const requset & rq){if(canhandlerequest()){handleprocess(rq);}else{sendrequesttonexthandler(rq);}} }/**********接下来的类只要负责实现canhandlerequest和handleprocess就行************/ class winform :public chainhandler{public:void handleprocess(const requset & rq){cout<<"winform 处理了"<chainhandler 类是重点,用户调用handle 函数实现 “当自己不能处理,就传递到下一个关联控件“的需求 。当然也可以重写handle 实现“当自己处理完后,也传递到下一个关联控件“,只需要把if逻辑删除就行 void main(){label label;groupbox groupbox;winform winform ;request rq;label.setnexthandler(&groupbox);groupbox.setnexthandler(&winform);//---------------------groupbox.handle(rq);//输出 winform 处理了点击请求//-------------------------label.handel(rq);//输出 label 传递了点击请求 winform 处理了点击请求//------------------------- }

 

 

 

 

总结

以上是ag凯发k8国际为你收集整理的设计模式的理解: 职责链模式 (chain of responsibility)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图