设计模式-责任链模式

说到责任链模式,几年前有一次面试经历,面试官拿着两页程序来考我设计模式,其实就是责任链模式,今天就来总结下这个模式
其实责任链模式的好处就是让我们省略了很多if/else或者switch语句,多个对象都有机会处理,从而避免了请求的发送者和接受者之间的耦合,形成一个链,沿着这个链传递,知道有一个对象处理为止。
角色:
1 抽象处理者(Handler)角色,定义一个处理请求的接口,定义两个方法,分别设定和返回下家的引用。
2 具体处理者:接到请求后,可以根据条件选择自己处理,或者传递给下家处理

例子:
我们在平时的工作中经常遇到请假的情况,如果是1天假,部门经理就有权利批准,如果是大于1天小于3天的假,部门总监可以批准,如果是3天以上的假,必须找总经理批准

/*
 * 抽象处理者角色类
 */
public abstract class Handler {

        protected Handler nextHandler = null;

        public Handler getNextHandler(){
            return nextHandler;
        }

        public void setNextHandler(Handler nextHandler){
            this.nextHandler = nextHandler;
        }

        public abstract String handlerRequest(int days);
}
/*
 * 部门经理
 */
public class DepartMentManager extends Handler{

    @Override
    public String handlerRequest(int days) {
        // TODO Auto-generated method stub
        String result = null;
        if(days==1)
        {
            result = "你的请假天数是1天,部门经理已经批准!";
        }else{
            if(getNextHandler()!=null){
                return getNextHandler().handlerRequest(days);
            }
        }
        return result;
    }

}
/*
 * 部门总监
 */
public class DepartMentDirector extends Handler{

    @Override
    public String handlerRequest(int days) {
        // TODO Auto-generated method stub
        String result = null;
        if(days < 3)
        {
            result = "你的请假天数是" + days + ",部门总监已经批准!";
        }else{
            if(getNextHandler()!=null){
                return getNextHandler().handlerRequest(days);
            }
        }
        return result;
    }

}
/*
 * 总经理
 */
public class TopManager extends Handler{

    @Override
    public String handlerRequest(int days) {
        // TODO Auto-generated method stub
        String result = null;
        if(days >= 3)
        {
            result = "你的请假天数是" + days + ",总经理已经批准!";
        }
        return result;
    }

}
public class MainClient {

    public static void main(String[] args){
        Handler h1 = new DepartMentManager();
        Handler h2 = new DepartMentDirector();
        Handler h3 = new TopManager();
        h1.setNextHandler(h2);
        h2.setNextHandler(h3);

        System.out.println("我想请1天假");
        String result = h1.handlerRequest(1);
        System.out.println(result);

        System.out.println("我想请2天假");
        String result1 = h1.handlerRequest(2);
        System.out.println(result1);

        System.out.println("我想请4天假");
        String result3 = h1.handlerRequest(4);
        System.out.println(result3);
    }
}

运行结果:

我想请1天假
你的请假天数是1天,部门经理已经批准!
我想请2天假
你的请假天数是2,部门总监已经批准!
我想请4天假
你的请假天数是4,总经理已经批准!

好了,责任链就这么简单,如有问题,欢迎指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值