设计模式--责任链模式

1.什么是责任链模式?

当一个请求可能需要多个对象中的某个进行处理时,将这些对象连成一条链,并沿者这条链传递该请求,知道有一个对象处理它为止。这样的情况或需求时,可以采用责任链模式。

2.如何实现?

1)处理者接口(Handler),负责定义处理请求的抽象方法,并设置下一个处理着的方法。

2)具体处理者,实现Handler接口中定义的方法。实现处理用户请求的逻辑,并设置下一个处理请求的对象。如果能够处理用户求情就处理,如果不能处理,交给下一个对象进行处理。

3)封装类。对以上的具体处理者进行封装,使它们形成一个处理链条。

3.代码实现?

以一个资金审批举例

1)处理者接口

/**
 * 处理者接口
 * 定义处理请求的方法
 * 设置下一个处理者
 */
public interface Handler {
    public void handleRequest(int money);
    public void setNextHandler(Handler handler);
}

2)处理者1

/**
 * 具体处理者--经理
 */
public class Manager implements Handler {
    Handler handler;
    @Override
    public boolean handleRequest(int money) {
        boolean result = false;
        if(money<1000){
           System.out.println("同意");
            result = true;
        }else{
            //超出处理范围,交给下一个处理着
            if(handler!=null){
             result =  handler.handleRequest(money);
            }
        }
        return  result;
    }

    @Override
    public void setNextHandler(Handler handler) {
        this.handler = handler;
    }
}

3)处理着2

/**
 * 具体处理者--总经理
 */
public class GeneralManager implements Handler {
    Handler handler;
    @Override
    public boolean handleRequest(int money) {
        boolean result = false;
        if(money<10000){
            System.out.println("同意");
            result = true;
        }else{
            //超出处理范围,交给下一个处理着
            if(handler!=null){
                result =  handler.handleRequest(money);
            }
        }
        return  result;
    }

    @Override
    public void setNextHandler(Handler handler) {
        this.handler = handler;
    }

}

4)封装类

/**
 * 封装类
 * 将所有的具体处理者封装成一条处理链
 */
public class Contxt {
    private Handler handler1,handler2;
    public Contxt(){

    }
    public void createHandlerChain(){
        handler1 = new Manager();
        handler2 = new GeneralManager();
        handler1.setNextHandler(handler2);
    }

    public void responseRequest(int request){
        handler1.handleRequest(request);
    }
}

5)测试类

public class TestMain {

    public static void main(String args []){
        int meney = 500;
        Contxt context = new Contxt();
        //创建处理链
        context.createHandlerChain();
        //相应请求
        boolean result = context.responseRequest(meney);
        System.out.println(result);
    }
}

4.总结

  责任链模式的优点

  1)责任链中的对象只和自己的后继是低耦合关系,和其他对象毫无关联,是程序更加的灵活。

  2)程序可以动态的增加、删除处理者的关系,或重新委派新的处理者

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niuyongzhi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值