第七篇:职责链模式
什么是职责链模式
关于职责链模式GOF是这样定义的:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间额耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
简易实现
Talk is cheap,我们来看下最为简易的职责链实现。
抽象的处理者:
1 | package top.huyuxin.ChainofResponsibility; |
具体的处理者:
1 | package top.huyuxin.ChainofResponsibility; |
1 | package top.huyuxin.ChainofResponsibility; |
1 | package top.huyuxin.ChainofResponsibility; |
使用:
1 | package top.huyuxin.ChainofResponsibility; |
输出:
1 | firsthandler capture it! |
这就是简易的职责链,结构特别的简单,但是问题来了,对于稳定运行的代码他的职责链应该是相对固定的,那么难道我们每次使用都要new出每一个处理者并建立职责链吗?我们可以建立一个管理类将这个过程封装起来
1 | package top.huyuxin.ChainofResponsibility; |
调用:
1 | package top.huyuxin.ChainofResponsibility; |
结果是一致的,。
实战
在实际的项目中请求条件的匹配简单的字符串判断是远远不够的,
我们需要将请求类也抽象出来。
抽象请求类:
1 | package top.huyuxin.ChainofResponsibility.plus; |
具体的请求:
1 | package top.huyuxin.ChainofResponsibility.plus; |
1 | package top.huyuxin.ChainofResponsibility.plus; |
1 | package top.huyuxin.ChainofResponsibility.plus; |
抽象的处理类:
1 | package top.huyuxin.ChainofResponsibility.plus; |
具体的处理类:
1 | package top.huyuxin.ChainofResponsibility.plus; |
1 | package top.huyuxin.ChainofResponsibility.plus; |
1 | package top.huyuxin.ChainofResponsibility.plus; |
职责链管理器:
1 | package top.huyuxin.ChainofResponsibility.plus; |
调用:
1 | package top.huyuxin.ChainofResponsibility.plus; |
结果:
1 | i can deal with the request:FirstRequest [name=FirstRequest, getRequestLevel()=1] |
我们将请求分离了出来丰富了请求的内容,使得能够在请求体内携带更多的信息。这些信息能够在请求的初始化以及处理类的处理中提供很大的帮助,并且我们将处理请求方法(handle)与请求分发分离(handlerRequest),使得逻辑更加的清晰。
职责链模式是比较简单的行为模式,他和状态模式比起来相似之处很多,但是又截然不同。
参考《Android源码设计模式解析与实战》中第九章–使编程更有灵活性——职责链模式