职责链模式
<div id="cnblogs_post_body">1概述当一个请求,有多个处理对象时,如果硬编码指定某个由某个对象来处理,需要采用ifelse的结构,从而产生了代码的耦合,如果要添加新的请求处理对象或调整请求处理的次序,必然会修改同一个方法,违背开闭原则。
2 GOF中的定义
意图:
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
结构图:
http://pic002.cnblogs.com/images/2012/323742/2012082411311528.jpg
适用性:
1>有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2>你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3>解耦ifelse,将处理对象组织一个链并希望处理的次序由客户端来定义;
3项目中的例子
在简单的审批处理中,经理与总经理有着不同的处理级别。比如,在请假审批中,经理可以批准3天的,而当要请假5天时需要总经理审批。在这里,我们定义请假3天的级别为3,请假5天的级别为5。
4紧耦合的实现
代码:
<div class="cnblogs_code" >http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttp://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gifView Code <div id="cnblogs_code_open_684cb135-0871-4ac2-bdb4-b995a37b32ff" class="cnblogs_code_hide"> public class Manager { public void HandelRequest(int levelDays) { if (levelDays <= 3) { Console.WriteLine("经理处理请假"); } else { Console.WriteLine("总经理处理请假"); } } } static void Main(string[] args) { Manager manager = new Manager(); manager.HandelRequest(4); Console.Read(); }
页:
[1]