首页 > 其他 > 详细

23种设计模式下篇

时间:2019-09-21 14:27:48      阅读:77      评论:0      收藏:0      [点我收藏+]

行为型模式,共11种

 (1)责任链模式

  将接收者对象连成一条链,并在该链上传递请求对象,直到有一个接收者处理该请求对象。该请求对象事先不知道是由哪一个接收者对象处理的。

public abstract class PriceHandler {

    //直接后继,用于传递请求
    protected PriceHandler successor;
    
    public void setSuccessor(PriceHandler successor){
        this.successor = successor;
    }
    
    //处理折扣申请
    public abstract void processDiscount(float discount);

}

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);
        }
    }

}

public class Manager extends PriceHandler {

    @Override
    public void processDiscount(float discount) {
        if(discount <= 0.3) {
            System.out.format("%s批准了折扣:%.2f\n", this.getClass().getName(),discount);
        }
        else {
            successor.processDiscount(discount);
        }
    }

}

public class CEO extends PriceHandler {

    @Override
    public void processDiscount(float discount) {
        if(discount <= 0.5) {
            System.out.format("%s批准了折扣:%.2f\n", this.getClass().getName(),discount);
        }
        else {
            System.out.format("%s拒绝了折扣:%.2f\n", this.getClass().getName(),discount);
        }
    }

}

public class PriceHandlerFactory {

    //创建PriceHandler的工厂函数
    public static PriceHandler createPricHandler() {
        // TODO Auto-generated method stub
        PriceHandler sales= new Sales();
        PriceHandler manager= new Manager();
        PriceHandler ceo= new CEO();
        sales.setSuccessor(manager);
        manager.setSuccessor(ceo);
        return sales;
    }
}

public class Customer {
    
    private PriceHandler pricHandler;
    
    public void setPriceHandler(PriceHandler pricHandler) {
        this.pricHandler = pricHandler;
    }
    
    public void requestDiscount(float discount) {
        pricHandler.processDiscount(discount);
    }
    
}

public class MainClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Customer customer = new Customer();
        customer.setPriceHandler(PriceHandlerFactory.createPricHandler());
        Random rand = new Random();
        for(int i=0;i<10;i++) {
            System.out.print(i+":");
            customer.requestDiscount(rand.nextFloat());
        }
    }

}

 

23种设计模式下篇

原文:https://www.cnblogs.com/moris5013/p/11562237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!