Java设计模式之责任链模式

模式介绍

使用多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,只到有对象处理它为止。

应用场景

多个对象可以处理同一个请求,但具体由哪一个对象处理则在运行时动态决定。
在请求处理者不明确的情况下向多个对象中一个提交一个请。
需要动态指定一组对象处理请求。

代码例子

在生活中也会用到责任链模式,例如在公司里面的员工请假,首先要向主管请求,如果请假天数小的话,主管就直接批了,如果大的话,就要再向上一级领导请求了。

UML 图
这里写图片描述

请假对象

/**
 * 请假对象
 * @author S
 *
 */
public class QingjiaRequest {

    //请假人名
    public String name;
    //请假天数
    public int days;

}

领导对象

/**
 * 领导
 * @author S
 *
 */
public abstract class Leader {

    //领导的下一级领导
    public Leader nextLeader;

    //设置领导的下一级领导
    public void setNextLeader(Leader leader){
        this.nextLeader = leader;
    }

    //处理请求
    public abstract void handleRequest(QingjiaRequest request);
}

主管

/**
 * 主管
 * @author S
 *
 */
public class Director extends Leader{



    @Override
    public void handleRequest(QingjiaRequest request) {
        // TODO Auto-generated method stub
        System.out.println(request.name+":请假"+request.days+"天");
        if(request.days<=3){//小于3天
            System.out.println("主管:批准");
        }else{
            System.out.println("主管:请假大于3天,需要请示上级");
            if(this.nextLeader!=null){
                this.nextLeader.handleRequest(request);
            }
        }
    }

}

经理

 * 经理
 */
public class Manager extends Leader{

    @Override
    public void handleRequest(QingjiaRequest request) {
        System.out.println(request.name+":请假"+request.days+"天");
        // TODO Auto-generated method stub
        if(request.days<=5){
            System.out.println("经理:请假小于5天,批准");
        }else{

        }
    }


}

Main

/**
 * 设计模式-责任链模式
 * @author S
 *
 */
public class Main {

    public static void main(String args[]){

        //小明请假2天
        QingjiaRequest request = new QingjiaRequest();
        request.name = "小明";
        request.days = 2;
        //小刚请假5天
        QingjiaRequest request1 = new QingjiaRequest();
        request1.name = "小刚";
        request1.days = 5;

        //主管
        Leader director = new Director();
        //经理
        Leader manager = new Manager();
        //主管指定下一级领导
        director.setNextLeader(manager);
        //处理请假
        director.handleRequest(request);
        director.handleRequest(request1);
    }
}

打印

小明:请假2天
主管:批准
小刚:请假5天
主管:请假大于3天,需要请示上级
小刚:请假5天
经理:请假小于5天,批准
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值