设计模式之职责链模式

来源:互联网 发布:淘宝客佣金多少合适 编辑:程序博客网 时间:2024/06/05 01:58

职责链设计模式

*职责链设计模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
* 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理位置。


职责链设计模式的角色:

请求处理者接口(Handler):定义一个处理请求的接口,可以实现后继链;

请求处理者实现(ConcreteHandler):请求处理接口的实现,如果它可以处理请求,就处理,否则就将该请求转发给它的后继者。


Handler类,定义一个处理请求的接口。


/** * 定义一个处理请求的接口 * @author zzj * */public abstract class Handler {//持有后继的责任对象protected Handler successor;//设置后继的责任对象public void setSuccssor(Handler successor){this.successor = successor;}//处理对象public abstract void HandlerRequest(int request);}


* 具体处理者类
* 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。

/** * 具体处理者类 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。 * @author zzj * */public class ConcreteHandler1 extends Handler {@Overridepublic void HandlerRequest(int request) {if(request >= 0 && request < 10){System.out.println("ConcreteHandler1处理请求"+request);}else if(successor != null){//转移到下一位successor.HandlerRequest(request);}}}

/** * 具体处理者类 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。 * @author zzj * */public class ConcreteHandler2 extends Handler {@Overridepublic void HandlerRequest(int request) {if(request >= 10 && request < 20){System.out.println("ConcreteHandler2处理请求"+request);}else if(successor != null){successor.HandlerRequest(request);}}}

/** * 具体处理者类 * 处理它所负责的请求,可访问它的后继者,如果可处理该请求,就处理,否则就将该请求转发给它的后继者。 * @author zzj * */public class ConcreteHandler3 extends Handler {@Overridepublic void HandlerRequest(int request) {if(request >= 20 && request < 30){System.out.println("ConcreteHandler3处理请求"+request);}else if(successor != null){successor.HandlerRequest(request);}}}

客户端代码,向链上的具体处理者对象提交请求

public class Test {public static void main(String[] args){//设置职责链Handler handler1 = new ConcreteHandler1();Handler handler2 = new ConcreteHandler2();Handler handler3 = new ConcreteHandler3();handler1.setSuccssor(handler2);handler2.setSuccssor(handler3);int[] requests = {2,8,10,15,20,25,30};for(int request : requests){handler1.HandlerRequest(request);}}}

输出结果:

ConcreteHandler1处理请求2ConcreteHandler1处理请求8ConcreteHandler2处理请求10ConcreteHandler2处理请求15ConcreteHandler3处理请求20ConcreteHandler3处理请求25




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机停用了支付宝充值码怎么办 苹果手机桌面上找不到支付宝怎么办 苹果手机支付宝找不到了怎么办 微信上充话费没到账怎么办 冲q币不到账怎么办 支付宝冲话费没到帐怎么办 qq实名认证没有银行卡怎么办 微信零钱限额没有银行卡怎么办 qq钱包忘记支付密码怎么办 零钱包密码忘了怎么办 关爱通密码知道卡号忘了怎么办 卡号的密码忘了怎么办 银行卡号密码忘了怎么办 微信超出单月支付限额怎么办 行李箱三位数密码忘记了怎么办 手机忘记4位数密码怎么办 win7登入密码忘记了怎么办 电脑登入密码忘记了怎么办 电脑忘记登入密码怎么办 qq钱包支付密码忘了怎么办 财付通转走我卡里的钱怎么办 银行卡资金通过财付通被盗怎么办 社保卡忘了密码怎么办 医保卡忘了密码怎么办 手机qq红包忘记支付密码怎么办 微信红包忘记支付密码怎么办 充点话费充错了怎么办 qq转账记录删除了怎么办 qq转账记录删了怎么办 qq怎么办?q币转给微信 q币送不了别人怎么办 新qq号忘记了怎么办 手机qq登不上去怎么办 qq的账号忘了怎么办 微信红包密码输错锁了怎么办 陌陌钱包异常钱怎么办 对公账户转错了怎么办 微信零钱转账限额怎么办 微信红包充错话费怎么办 qq支付20万限额怎么办 qq红包20万限额怎么办