设计模式之责任链模式

设计模式之责任链模式

处理者抽象类Handler
客户对象Customer

设计模式之责任链模式

责任链模式就是客户对象发起一个请求,根据这个请求的具体参数,从责任链中的众多对象中,选择出一个处理者对象来处理这个请求。如何选择出呢?每个处理者对象先判断自己是否可以处理,是的话,就自己处理,中断传递;否的话,就向后继传递请求,一级一级的传递下去。
处理者抽象类Handler:
public abstract class Handler {
        protected Handler successor;
        public void setSuccessor(Handler successor) {
            this.successor = successor;
        }
        public abstract void handDiscount(float discount);
}

底层销售员,继承Handler抽象类
public class Sale extends Handler {
    @Override
    public void handDiscount(float discount) {
        if(discount<=0.25){
            System.out.println(this.getClass()+"批准了这次折扣:"+discount);
        }else{
            this.successor.handDiscount(discount);
        }
    }
}

销售经理,继承Handler抽象类
public class Manager extends Handler {
    @Override
    public void handDiscount(float discount) {
        if(discount<=0.35){
            System.out.println(this.getClass()+"批准了这次折扣:"+discount);
        }else{
            this.successor.handDiscount(discount);
        }
    }
}

主管,副总裁,总裁,继承Handler抽象类(代码省略)

客户对象Customer
public class Customer {
    private Handler handler;
    public void setHandler(Handler handler) {
        this.handler = handler;
    }
    public Customer(Handler handler) {
        super();
        this.handler = handler;
    }
    public void requestDiscount(float discount){
        handler.handDiscount(discount);
    }
}

处理者工厂
public class HandlerFactory {
    //工厂设计模式,创建对象
    public static Handler creatHandler() {  
        Handler sale=new Sale(); 
        Handler manager=new Manager(); 
        Handler director=new Director(); 
        Handler vicePresident=new VicePresident(); 
        Handler ceo=new Ceo();      
        sale.setSuccessor(manager);
        manager.setSuccessor(director);
        director.setSuccessor(vicePresident);
        vicePresident.setSuccessor(ceo);
        return sale;
    }
}

测试类
public class Test {
    public static void main(String[] args){     
        Customer customer=new Customer(HandlerFactory.creatHandler());
        for(int i=0;i<10;i++){
            float discount=new  Random().nextFloat();
            customer.requestDiscount(discount);
        }               
    }
}
总结
责任链核心:Handler中引入自身对象,作为后继对象,这样才能一级一级的传递下去,形成责任链。
责任链模式缺点:只有一个请求,只需一个concreteHandler去处理,却通过工厂方法创建了大量的concreteHandler对象,极大的浪费内存。自己使用时需谨慎。
责任链模式应用:java的异常处理机制,每个异常向上抛,直到顶级异常接口Throwsable;javascript中的dom,例如:td–tr–table
自己的一点点理解,如有不对,欢迎指正。来自于慕课网

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值