1 / 17
文档名称:

设计模式教学课件17(与“处理”有关文档共17张).pptx

格式:pptx   大小:91KB   页数:17页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

设计模式教学课件17(与“处理”有关文档共17张).pptx

上传人:胜利的果实 2022/11/22 文件大小:91 KB

下载得到文件列表

设计模式教学课件17(与“处理”有关文档共17张).pptx

文档介绍

文档介绍:该【设计模式教学课件17(与“处理”有关文档共17张) 】是由【胜利的果实】上传分享,文档一共【17】页,该文档可以免费在线阅读,需要了解更多关于【设计模式教学课件17(与“处理”有关文档共17张) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。从击鼓传花谈起
击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓,击鼓的地方与传花的地方是分开的,以示公正。开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒。
击鼓传花便是职责链模式的应用。职责链可能是一条直线、一个环链或者一个树结构的一部分。
第1页,共17页。
实例
公司申请聚餐费用
公司申请差旅费用
第2页,共17页。
问题
聚餐费用申请的处理流程是可能会变动的
各个处理环节的业务处理也是会变动的
第3页,共17页。
问题抽象
客户端发出一个请求,会有很多对象都可以来处理这个请求,而且不同对象的处理逻辑是不一样的。对于客户端而言,无所谓谁来处理,反正有对象处理就可以了。而且在上述处理中,还希望处理流程是可以灵活变动的,而处理请求的对象需要能方便地修改或者是被替换掉,以适应新的业务功能的需要,
第4页,共17页。
解决方案
职责链(ChainofResponsibility)模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
第5页,共17页。
解决问题的思路
动态构建流程步骤,这样随时可以重新组合出新的流程来
第6页,共17页。
抽象处理者(Handler)角色:定义出一个处理请求的接口。
}
HandleRequest(request);
Handlerh3=newConcreteHandler3();
}
Name,request);
Name,request);
publicvoidSetSuccessor(Handlersuccessor)
WriteLine("{0}处理请求{1}",
staticvoidMain(string[]args)
Handlerh1=newConcreteHandler1();
SetSuccessor(h3);
抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。
具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
第7页,共17页。
处理过程
ChainofResponsibility模式中ConcreteHandler将自己的后继对象(向下传递消息的对象)记录在自己的后继表中,当一个请求到来时,ConcreteHandler会先检查看自己有没有匹配的处理程序,如果有就自己处理,否则传递给它的后继。
第8页,共17页。
示意代码
abstractclassHandler
{
protectedHandlersuccessor;
publicvoidSetSuccessor(Handlersuccessor)
{
=successor;
}
publicabstractvoidHandleRequest(intrequest);
}
第9页,共17页。
classConcreteHandler1:Handler
{
publicoverridevoidHandleRequest(intrequest)
{
if(request>=0&&request<10)
{
("{0}处理请求{1}",
().Name,request);
}
elseif(successor!=null)
{
(request);
}
}
}
第10页,共17页。