责任链模式

来源:互联网 发布:cydia搜索不到软件 编辑:程序博客网 时间:2024/05/06 08:28
import java.util.Random;import com.imooc.pattern.cor.handler.PriceHandler;import com.imooc.pattern.cor.handler.PriceHandlerFactory;/* * 客户,请求折扣,一级级申请折扣 * 实际案例如:异常处理机制,dom事件,http filter等 */public class Customer {    private PriceHandler priceHandler;    public void setPriceHandler(PriceHandler priceHandler) {        this.priceHandler = priceHandler;    }    public void requestDiscount(float discount){        priceHandler.processDiscount(discount);    }    public static void main(String[] args){        Customer customer = new Customer();        customer.setPriceHandler(PriceHandlerFactory.createPriceHandler());        Random rand = new Random();        for(int i=1;i<=100;i++){            System.out.print(i+":");            customer.requestDiscount(rand.nextFloat());        }    }}
/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler {    /*     * 直接后继,用于传递请求     */    protected PriceHandler successor;    public void setSuccessor(PriceHandler successor) {        this.successor = successor;    }    /*     * 处理折扣申请     */    public abstract  void processDiscount(float discount);}
public class PriceHandlerFactory {    /*     * 创建PriceHandler的工厂方法     */    public static PriceHandler createPriceHandler() {        PriceHandler sales = new Sales();        PriceHandler lead = new Lead();        PriceHandler man = new Manager();        PriceHandler dir = new Director();        PriceHandler vp = new VicePresident();        PriceHandler ceo = new CEO();        sales.setSuccessor(lead);        lead.setSuccessor(man);        man.setSuccessor(dir);        dir.setSuccessor(vp);        vp.setSuccessor(ceo);        return sales;    }}
/* * 销售, 可以批准5%以内的折扣 */public class Sales extends PriceHandler {    @Override    public void processDiscount(float discount) {        if(discount <= 0.05){            System.out.format("%s批准了折扣:%.2f%n", this.getClass().getName(), discount);        }else{            //自己没权限处理就传递到上一级处理,形成责任链            successor.processDiscount(discount);        }    }}
/* * CEO, 可以批准55%以内的折扣 * 折扣超出55%, 就拒绝申请 */public class CEO extends PriceHandler {    @Override    public void processDiscount(float discount) {        if(discount<=0.55){            System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount);        }else{            System.out.format("%s拒绝了折扣:%.2f%n", this.getClass().getName(),discount);        }    }}

参考:http://www.imooc.com/

0 0
原创粉丝点击