责任链模式
来源:互联网 发布: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
- 责任链模式
- 深入浅出责任链模式
- 责任链模式
- 责任链模式
- 深入浅出责任链模式
- 责任链模式(一)
- 责任链模式(二)
- 责任链模式(三)
- 责任链模式
- java责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- 责任链模式
- c++ 责任链模式
- java责任链模式
- 责任链模式
- MindManager参考资料
- Codeforces Round #368 (Div. 2) B. Bakery (水题)
- Doxygen使用学习(六)------Doxygen的特殊命令字之"用于显示例子的命令"
- subtlime text3 使用教程
- java容易被人忽略的一些小问题
- 责任链模式
- 入门JNI需要知道的(二)
- java基础学习之文件读写
- 欢迎使用CSDN-markdown编辑器
- zookeeper安装配置
- Auto Restart application after Crash/Force Close in Android
- Lua初识(2)_运算符
- Java中return的用法
- dbutils(初学者自学经历)