设计模式之责任链模式

设计模式之责任链模式

责任链模式简介

责任链,顾名思义,由不同的责任承担者构成的链,简单地说,责任链模式就是由不同的责任者构成的链所构成的设计模式,这种模式的特点在于,当一个服务当前对象无法处理的时候,就可以按照指定的下一个处理者来进行处理,直到没有人能够处理为止,这种模式的好处在于,可以动态地将所需要的处理者连接起来,而不是将其硬编码在代码中,这样,当需要调整不同的处理者,比如说增加一个处理者或者减少一个处理者的时候,就比较方便了

责任链模式的具体实现

这里,假设有这样一种情况,当在公司申请钱的时候,少于2000直接由组长审批即可,大于2000小于5000则由经理进行审批,大于5000小于10000的时候,直接Boss进行处理,在没有采用责任链模式的时候,我们会通过分支结构进行处理,如下所示


if(money < 2000){
 // group leader
}else if (money < 5000){
 // manager 
}else if (money < 10000){
 // boss 
}

这样子有一个不太好的地方就是,如果此时金额超过的10000的时候,希望由董事会进行审批,此时就需要修改该代码了,这样子不可避免就会带来许多不必要的麻烦了

接下来来看下采用责任链模式之后的代码


/**
 * 领导类
 */
abstract class Director {

    protected Director nextDirector;

    public Director(Director nextDirector) {
        this.nextDirector = nextDirector;
    }
    // 处理请求
    public abstract void handleRequest(double money);
}

/**
 * 组长
 */
class GroupLeader extends Director{

    public GroupLeader(Director nextDirector) {
        super(nextDirector);
    }

    @Override
    public void handleRequest(double money) {
        if (money < 2000){
            System.out.printf("Group Leader Handle Money %.2f\n", money);
        }else {
            if (nextDirector != null){
                nextDirector.handleRequest(money);
            }
        }
    }
}

/**
 * 经理
 */
class Manager extends Director{

    public Manager(Director nextDirector) {
        super(nextDirector);
    }

    @Override
    public void handleRequest(double money) {
        if (money < 5000){
            System.out.printf("Manager Handle Money %.2f\n", money);

        }else {
            if (nextDirector != null){
                nextDirector.handleRequest(money);
            }
        }
    }
}

/**
 * Boss
 */
class Boss extends Director{

    public Boss(Director nextDirector) {
        super(nextDirector);
    }

    @Override
    public void handleRequest(double money) {
        if (money < 10000){
            System.out.printf("Boss Handle Money %.2f\n", money);
        }else {
            if (nextDirector != null){
                nextDirector.handleRequest(money);
            }
        }
    }
}

// 测试类
 class Client{
    public static void main(String[] args) {
        // 根据需要组合不用的处理者
        Director boss = new Boss(null);
        Director manager = new Manager(boss);
        Director groupLeader = new GroupLeader(manager);
    }
}

可以看到,此时将处理者的顺序指定交给了客户端来处理,这样子的好处在于,可以根据业务的需要进行组合处理者,而且,可以将处理顺序编写在配置文件中,这样子,当进行修改的时候就只需要增加新的处理类以及指定其处理顺序,而无需改动原来的代码了

总结

责任链模式的优点在于,可以根据需要动态地指定处理者,而且,将不同的处理者之间的关系分隔来开,使得代码结构更加清晰,更加有利于维护,而且,在需要增加或者减少处理者的时候,减少了对原代码的修改,减少了修改所带来的不必要麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值