设计模式其实很简单学习笔记:设计模式之职责链模式
2014-12-31 10:12
501 查看
定义
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这多个对象连成一条链,
并沿着这条链传递该请求,直到有一个对象处理它为止。
解释
即将请求的处理者们组织成一条链,使请求沿着这条职责链传递,直到有一个处理者将其处理或者传递到链的末尾仍没有被处理。
使用职责链模式,请求发送者不需要关心请求的处理细节,请求是如何传递的以及是谁处理了请求,这样就将请求的发送者与请求的处理者进行了解耦
结构图
![](http://img.blog.csdn.net/20141231225411302?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQ29kZV9UaGlua2luZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
基本代码
//具体请求处理者A
//具体请求处理者B
//具体请求处理者C
//客户端代码
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这多个对象连成一条链,
并沿着这条链传递该请求,直到有一个对象处理它为止。
解释
即将请求的处理者们组织成一条链,使请求沿着这条职责链传递,直到有一个处理者将其处理或者传递到链的末尾仍没有被处理。
使用职责链模式,请求发送者不需要关心请求的处理细节,请求是如何传递的以及是谁处理了请求,这样就将请求的发送者与请求的处理者进行了解耦
结构图
基本代码
//处理请求的接口 public abstract class Handler { protected Handler successor;//指向下一个请求处理者 //设置下一个处理者 public void SetSuccessor(Handler successor) { this.successor=successor; } //抽象的处理请求的方法 public abstract void HandlerRequest(int request); }
//具体请求处理者A
public class ConcreteHandlerA extends Handler { //覆盖父类的抽象方法 @Override public void HandlerRequest(int request) { if(request==1) { System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request); }else { if(this.successor!=null) { System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!"); this.successor.HandlerRequest(request); } } } }
//具体请求处理者B
public class ConcreteHandlerB extends Handler { //覆盖父类的抽象方法 @Override public void HandlerRequest(int request) { if(request==2) { System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request); }else { if(this.successor!=null) { System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!"); this.successor.HandlerRequest(request); } } } }
//具体请求处理者C
//具体请求处理者C public class ConcreteHandlerC extends Handler { //覆盖父类的抽象方法 @Override public void HandlerRequest(int request) { if(request==3) { System.out.println(this.getClass().getCanonicalName()+"处理了请求:"+request); }else { if(this.successor!=null) { System.out.println(this.getClass().getCanonicalName()+"自身无法处理请求,转给下一个处理者!"); this.successor.HandlerRequest(request); } } } }
//客户端代码
public static void main(String[] args) { Handler handlerA=new ConcreteHandlerA(); Handler handlerB=new ConcreteHandlerB(); Handler handlerC=new ConcreteHandlerC(); handlerA.SetSuccessor(handlerB); handlerB.SetSuccessor(handlerC); for(int i=0;i<4;i++) { handlerA.HandlerRequest(i);//将请求发送到职责链上 } }
相关文章推荐
- 五 单一职责、开放—封闭、依赖倒转原则——设计模式学习笔记
- 设计模式学习笔记三【单一职责原则】
- 【学习笔记javascript设计模式与开发实践(职责链模式)----13】
- 设计模式学习笔记---职责链模式chain of responsibility(Java版)
- 【设计模式学习笔记十四】【行为模式】【职责链模式(Chain Of Responsibility)】
- 设计模式学习笔记--职责链模式
- 设计模式学习笔记--职责链模式
- [设计模式学习笔记]CHAIN OF RESPONSIBILITY(职责链)
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 设计模式学习笔记(十九)—Chain of Responsibility职责链模式
- 设计模式学习笔记--Chain Of Responsibility 职责链模式
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 设计模式 学习笔记(2)单一职责原则、开放封闭原则、依赖倒转原则
- java 设计模式学习笔记十六 chain of responsibility 职责链设计模式
- 二十、职责链模式——设计模式学习笔记
- 设计模式学习笔记之-职责链模式CHAIN OF RESPONSIBILITY
- 步步为营 .NET 设计模式学习笔记 十九、Chain of Responsibility(职责链模式)
- 设计模式学习笔记(18)——职责链模式
- 设计模式学习笔记——单一职责原则
- java 设计模式学习笔记十六 chain of responsibility 职责链设计模式