设计模式之责任链

一.简介

生活中常有一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等。

责任链(Chain of Responsibility)模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

模式结构:
1.抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。

2.具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。

3.客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。

二.实现

package com.vincent;



/**
 * 设计模式
 *
 */
public class App {
    public static void main( String[] args ) throws Exception{
        Handler deptManager = new DepartmentLeader();
        Handler manager = new Manager();

        deptManager.setNext(manager);

        deptManager.handleRequest(2);
        System.out.println("--------------");
        deptManager.handleRequest(15);
    }
}

/**
 * 抽象处理者
 */
abstract class Handler{
    private Handler next;

    public Handler getNext() {
        return next;
    }

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

    abstract void handleRequest(int days);

}


class DepartmentLeader extends Handler{

    @Override
    void handleRequest(int days) {
        if(days <= 2){
            System.out.println("部门领导审批");
        }
        else{
            getNext().handleRequest(days);
        }
    }
}

class Manager extends Handler{
    @Override
    void handleRequest(int days) {
        if(days>=3){
            System.out.println("公司经理处理");
        }
        else {
            getNext().handleRequest(days);
        }
    }
}

效果:
在这里插入图片描述

三.总结

1.责任链模式将处理请求传递到能处理请求的类,使类职责单一灵活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值