设计模式之职责链模式
来源:互联网 发布:淘宝网店申请 编辑:程序博客网 时间:2024/05/16 10:34
职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
Handler类,定义一个处理请求的接口。
public abstract class Handler { protected Handler mSuccessor; // 设置继任者 public void setSuccessor(Handler successor) { mSuccessor = successor; } public abstract void handleRequest(int request);}
ConcreteHandler类,具体处理者类,处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理之,否则就将该请求转发给它的后继者。
public class ConcreteHandler1 extends Handler { @Override public void handleRequest(int request) { if (request >= 0 && request < 10) { System.out.println(getClass().getSimpleName() + "处理请求"); } else if (mSuccessor != null) { mSuccessor.handleRequest(request); } }}
public class ConcreteHandler2 extends Handler { @Override public void handleRequest(int request) { if (request >= 10 && request < 20) { System.out.println(getClass().getSimpleName() + "处理请求"); } else { System.out.println("请求错误,无法处理"); } }}
调用:
ConcreteHandler1 handler1 = new ConcreteHandler1();ConcreteHandler2 handler2 = new ConcreteHandler2();handler1.setSuccessor(handler2);handler1.handleRequest(2);handler1.handleRequest(12);handler1.handleRequest(22);
输出结果:
ConcreteHandler1处理请求ConcreteHandler2处理请求请求错误,无法处理
职责链的好处:
当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它。
接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构。结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接收者的引用。
可以随时地增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性。
一个请求极有可能到了链的末端都得不到处理,或者因为没有正确的配置而得不到处理。需要事先考虑全面。
管家中骚扰拦截、私密空间、手机找回模块都需要处理短信,可以根据优先级处理短信,号码不在该模块的话把请求交给下一个对象处理。
0 0
- 设计模式 之 职责链
- 设计模式之职责链
- 设计模式之职责链
- 设计模式之职责链模式
- 设计模式之职责链模式
- C# 设计模式之 职责链模式
- 设计模式之职责链模式
- 大话设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 大话设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之-----职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- 设计模式之职责链模式
- C++设计模式之职责链模式
- java实现mysql数据库的导出
- mybatis--动态sql
- Android LocalSocket进程通信
- statusCode(状态码) 200、300、400、500序列
- jdk环境变量配置
- 设计模式之职责链模式
- Android Touch事件传递
- 3.1 Javascript:探索客户端-设置网页元素根据窗口比例调整位置与大小
- Activity的生命周期介绍(转载)
- struts2 表单提交方式
- RelativeLayout的各种子布局的属性
- Objective-C Block基本用法
- 手机刷机
- bootstrap聪明在哪里(CSS)