第0章:简介
职责链模式定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止
职责链模式本质:分离职责,动态组合
参考:研磨设计模式(书籍),大话设计模式(书籍)
模式图:
待补充
第1章:实践
第0节:职责链模式
(1)职责的接口(Handler.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfResponsibility; /** * 职责的接口,即处理请求的接口 * * 职责链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 * 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 * * 职责链模式的本质:分离职责,动态组合 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:48 */ public abstract class Handler { //持有后继的职责对象 protected Handler handler; /** * 设置后继的职责对象 * @param handler */ public void setHandler(Handler handler) { this.handler = handler; } /** * 处理请求的方法,参数可有可无 */ public abstract void handleRequest(String flag); } |
(2)处理类A(HandlerExtendsA.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfResponsibility; /** * 处理类A * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsA extends Handler{ @Override public void handleRequest(String flag) { if(flag != null && "A".equalsIgnoreCase(flag.trim())){ System.out.println("处理类A处理了请求,责任传递结束"); }else{ System.out.println("处理类A不处理请求,交给下一环处理"); this.handler.handleRequest(flag); } } } |
(3)处理类B(HandlerExtendsB.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfResponsibility; /** * 处理类B * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsB extends Handler{ @Override public void handleRequest(String flag) { if(flag != null && "B".equalsIgnoreCase(flag.trim())){ System.out.println("处理类B处理了请求,责任传递结束"); }else{ System.out.println("处理类B不处理请求,交给下一环处理"); this.handler.handleRequest(flag); } } } |
(4)处理类C(HandlerExtendsC.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfResponsibility; /** * 处理类C * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsC extends Handler{ @Override public void handleRequest(String flag) { if(flag != null && "C".equalsIgnoreCase(flag.trim())){ System.out.println("处理类C处理了请求,责任传递结束"); }else{ System.out.println("处理类C不处理请求,交给下一环处理"); this.handler.handleRequest(flag); } } } |
(5)客户端测试,职责链(Client.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfResponsibility; /** * 客户端测试,职责链 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-18 上午12:00 */ public class Client { public static void main(String args[]){ //环对象 Handler handlerA = new HandlerExtendsA(); Handler handlerB = new HandlerExtendsB(); Handler handlerC = new HandlerExtendsC(); //环组成链,可根据实际任意顺序组合 handlerA.setHandler(handlerB); handlerB.setHandler(handlerC); //测试示例 handlerA.handleRequest("C"); } } |
第1节:扩展职责链模式(功能链模式)
(1)职责的接口(Handler.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfFunction; /** * 职责的接口,即处理请求的接口,这里每个环处理部分功能,也叫功能链 * * 职责链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 * 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 * * 职责链模式的本质:分离职责,动态组合 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:48 */ public abstract class Handler { //持有后继的职责对象 protected Handler handler; /** * 设置后继的职责对象 * @param handler */ public void setHandler(Handler handler) { this.handler = handler; } /** * 处理请求的方法,参数可有可无 */ public abstract void handleRequest(); } |
(2)处理类A(HandlerExtendsA.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfFunction; /** * 处理类A * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsA extends Handler { @Override public void handleRequest() { System.out.println("处理类A处理了部分功能,剩下的功能由后继环处理"); this.handler.handleRequest(); } } |
(3)处理类B(HandlerExtendsB.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfFunction; /** * 处理类B * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsB extends Handler { @Override public void handleRequest() { System.out.println("处理类B处理了部分功能,剩下的功能由后继环处理"); this.handler.handleRequest(); } } |
(4)处理类C(HandlerExtendsC.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfFunction; /** * 处理类C * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-17 下午11:54 */ public class HandlerExtendsC extends Handler { @Override public void handleRequest() { System.out.println("处理类C处理了剩下功能,传递结束,无后继环"); } } |
(5)客户端测试,功能链(Client.java)
package com.mcc.core.designPattern.behavior.chainOfResponsibility.chainOfFunction; /** * 客户端测试,功能链 * * @author <a href="mailto:417877417@qq.com">menergy</a> * DateTime: 14-3-18 上午12:00 */ public class Client { public static void main(String args[]){ //环对象 Handler handlerA = new HandlerExtendsA(); Handler handlerB = new HandlerExtendsB(); Handler handlerC = new HandlerExtendsC(); //环组成链,可根据实际任意顺序组合 handlerA.setHandler(handlerB); handlerB.setHandler(handlerC); //测试示例 handlerA.handleRequest(); } } |