Java设计模式之责任链模式

Java23种设计模式

开始之前举一个例子:

小明为公司普通员工,现在有事情需要请假,公司领导层分为:老板、经理、主管。其中主管可以审批一天以内的假,经理可以审批三天以内的假,超过三天的假必须找老板审批。公司能跟普通员工直接工作交接的只有主管,不存在跨级工作交接的情况。

在这里插入图片描述

实现该功能需要四个对象:小明、主管、经理、老板。其中主管、经理、老板在这个事件中有审批的动作,小明有提交申请的动作。那么实现代码如下:


public class Company {
    public static void main(String[] args){
        new Company();
    }

    public Company(){
        XiaoMing xiaoMing = new XiaoMing();
        System.out.print(xiaoMing.leave()?"批准":"未批准");
    }

    class XiaoMing{
        int days = 10;
        boolean leave(){
            return new ZhuGuan().isLeave(days);
        }
    }

    interface Leave{
        boolean isLeave(int days);
    }

    class ZhuGuan implements Leave{

        @Override
        public boolean isLeave(int days) {
            if(days<=1) return true;
            return new JingLi().isLeave(days);
        }
    }

    class JingLi implements Leave{

        @Override
        public boolean isLeave(int days) {
            if(days<=3) return true;
            return new Boss().isLeave(days);
        }
    }

    class Boss implements Leave{

        @Override
        public boolean isLeave(int days) {
            if(days<7) return true;
            return false;
        }
    }
}

执行结果为:

未批准

这个例子是一个典型的责任链模式的例子,这其中必备条件有:

  1. 请求发起者:小明
  2. 责任链公共意图:审批
  3. 一个请求者,多个责任人:主管、经理、老板…
  4. 请求发起者不需要关心最终责任人是谁,只需要知道处理结果。

定义:

责任链模式为请求者提供一个接收者链,请求者不需要关心是谁处理了请求,实现请求者和处理事件的接收者之间的解耦。

使用场景:

1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。
2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3、可动态指定一组对象处理请求。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值