为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式笔记(21)--职责链模式

标签:
设计模式

GOF对职责链模式的定义为:“使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并且沿着这条链传递该请求,直到有一个对象处理它为止。”

每一个请求的处理者首先检查自己的处理权限是否足够,这个权限可以由开发人员设置校验方式,然后对自己有权限处理的事务进行裁断,对自己没有权限处理的请求则转发给处理权限更高一级的处理者。

接下来以钦差和皇帝为例,上代码:

package ChainOfResponsibility;public abstract class Handler {    protected Handler handler;    public void SetHandler(Handler h)
    {        this.handler = h;
    }    public abstract void HandleRequest(int count);
}
package ChainOfResponsibility;public class Prefects extends Handler{    @Override
    public void HandleRequest(int count) {        // TODO Auto-generated method stub
        if(count < 5)
        {
            System.out.println("大臣说:贪官数目为:"+count+"可以直接判决,斩了!");
        }        else
        {            if(this.handler!=null)
            {
                System.out.println("贪官数目为:"+count+"应该启奏皇上来裁断~");                this.handler.HandleRequest(count);
            }
        }
    }
}
package ChainOfResponsibility;public class Emperor extends Handler{    @Override
    public void HandleRequest(int count) {        // TODO Auto-generated method stub
        System.out.println("贪官数目为:"+count+" 太多了,就地正法4个,剩下的带来见朕!");
    }
}
package ChainOfResponsibility;public class client {    public static void main(String[] args)
    {
        Handler prefects = new Prefects();
        Handler emperor = new Emperor();
        
        prefects.SetHandler(emperor);        for(int i = 3;i < 8;i++)
        {
            prefects.HandleRequest(i);
        }
    }
}

webp

职责链模式中最关键的就是当客户提交一个请求之后,请求是沿着职责链传递的,直到有一个具体的concretHandler对象会去处理它为止。这样做的好处就是请求者无需关心是哪个对象进行的处理,使得接收者和发送者都不用关心对方的明确信息,并且处在职责链中的对象也不知道整个链的结构。
职责链能够简化对象在之间的互相连接。
职责链的结构的客户端定义的,灵活性强。

职责链模式适用于以下情况

  1. 当有多个对象可以处理同一个请求,而具体哪个对象来处理这个请求在运行时刻需要自动判定

  2. 当需要在不明确接收者的情况下向多个对象的某一个提交请求时。

  3. 当处理一个请求的对象集合应该动态的被确定时



作者:球球球球笨
链接:https://www.jianshu.com/p/303a4c7902f2


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消