菜单
首页
博客
相册
时间轴
联系我
倒计时
设计模式入门:责任链模式
设计模式
|
2018-05-09 18:01:41
|
206 阅读
|
Linux
java
>文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创 **责任链模式,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求。** >场景:公司常见的事情——签字,一个待批准的任务,由管理者一层一层的批准 **结构** * 抽象处理者(Handler)角色:定义出一个处理请求的接口,接口中定义有对下家的引用。 * 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。 **设计**  **实现** 代码地址:[`https://github.com/telundusiji/designpattern`](https://github.com/telundusiji/designpattern) 抽象处理者 ``` @Data public abstract class Handler { private Handler handler; public abstract boolean handleRequest(String task); } ``` 具体处理者 小组长 ``` @Slf4j public class TeamLeader extends Handler{ @Override public boolean handleRequest(String task) { if("task".equals(task)){ log.info("组长批准{}",task); return getHandler().handleRequest(task); } log.info("组长驳回{}请求",task); return false; } } ``` 具体处理者 部门长 ``` @Slf4j public class HeadOfDepartment extends Handler { @Override public boolean handleRequest(String task) { if("task".equals(task)){ log.info("部门长批准{}",task); return getHandler().handleRequest(task); } log.info("部门长驳回{}请求",task); return false; } } ``` 具体处理者 技术总监 ``` @Slf4j public class CTO extends Handler { @Override public boolean handleRequest(String task) { if("task".equals(task)){ log.info("CTO批准{}",task); return true; } log.info("CTO驳回{}请求",task); return false; } } ``` **经典应用** Filter(过滤器)就是一个经典的责任链模式 * 抽象处理者:Filter * 具体处理者:实现Filter的类
back
to top