23种设计模式之责任链模式

责任链模式

定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
假如规定学生请假小于或等于 2 天,班主任可以批准;小于或等于 7 天,系主任可以批准;小于或等于 10 天,院长可以批准;其他情况不予批准;
代码如下:

public class ChainOfResponsibilityTest {
    public static void main(String[] args) {
        Leader leader1 = new ClassAdviser();
        Leader leader2 = new DepartmentHead();
        Leader leader3 = new Dean();
        leader1.setNext(leader2);
        leader2.setNext(leader3);

        // 不同天数请假验证
        for (int i = 0; i < 11; i++) {
            leader1.handleRequest(i + 1);
        }
    }
}

// 领导类
abstract class Leader {
    private Leader next;

    public Leader getNext() {
        return next;
    }

    public void setNext(Leader next) {
        this.next = next;
    }

    //处理请求的方法
    public abstract void handleRequest(int days);
}

// 班主任
class ClassAdviser extends Leader {

    @Override
    public void handleRequest(int days) {
        if (days <= 2) {
            System.out.println("班主任批准假期" + days + "天");
        } else {
            if (getNext() == null) {
                System.out.println("请假天数太长,不批准");
            } else {
                getNext().handleRequest(days);
            }
        }
    }
}

// 系主任
class DepartmentHead extends Leader {

    @Override
    public void handleRequest(int days) {
        if (days <= 7) {
            System.out.println("系主任批准假期" + days + "天");
        } else {
            if (getNext() == null) {
                System.out.println("请假天数太长,不批准");
            } else {
                getNext().handleRequest(days);
            }
        }
    }
}

// 系主任
class Dean extends Leader {

    @Override
    public void handleRequest(int days) {
        if (days <= 10) {
            System.out.println("院长批准假期" + days + "天");
        } else {
            if (getNext() == null) {
                System.out.println("请假天数太长,不批准");
            } else {
                getNext().handleRequest(days);
            }
        }
    }
}

在这里插入图片描述

参考资料:
1.http://c.biancheng.net/view/1383.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值