首页 / JAVA / Java实现责任链模式
Java实现责任链模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java实现责任链模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4075字,纯文字阅读大概需要6分钟。
内容图文
![Java实现责任链模式](/upload/InfoBanner/zyjiaocheng/1276/4528b1f031ed42e2a15b989a397ff6e7.jpg)
责任链模式:
将接受者对象连成一条链,并在该链上传递请求,直到一个几首这对象处理它。通过让更多对象有机会处理请求,避免了请求发送者和接受者之间的耦合。
责任链模式的优缺点:
优点:高内聚,低耦合。业务变更,新增一级处理时,只需要新增一个类即可。符合我们开闭原则(扩展开发,变更关闭)。
缺点:时间,内存的效果相对较大。java的AWT对责任链模式的抛弃,去拥抱了观察者模式。
应用:
Java异常处理机制
JavaScript事件模型
JavaEE的Filter拦截器
SpringSecurity Spring安全框架
实例:
变更需求
实例代码:
类结构图
具体代码:
package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 价格处理人,负责处理客户折扣申请 */ public abstract class PriceHandler { // 直接后继,用于传递请求 protected PriceHandler successor; public void setSuccessor(PriceHandler successor) { this.successor = successor; } /* * 处理折扣申请 */publicabstractvoid processDiscount(float discount); } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 销售,可以批准5%以内的折扣 */publicclass Sales extends PriceHandler { @Override publicvoid processDiscount(float discount) { if(discount <= 0.05){ System.out.format("%s批准了折扣:%2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 业务扩展,管理需要细分,新增以及销售层销售组长 * 销售小组长,可以批准15%以内的折扣 */publicclass Lead extends Sales{ @Override publicvoid processDiscount(float discount) { if(discount <= 0.15){ System.out.format("%s批准了折扣:%2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 销售经理,可以批准30%以内的折扣 */publicclass Manager extends Lead { @Override publicvoid processDiscount(float discount) { if(discount <= 0.30){ System.out.format("%s批准了折扣:%2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 销售总监,可以批准40%以内的折扣 */publicclass Director extends Manager { @Override publicvoid processDiscount(float discount) { if(discount <= 0.40){ System.out.format("%s批准了折扣:%2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 副总,可以批准50%以内的折扣 */publicclass VicePresident extends Director { @Override publicvoid processDiscount(float discount) { if(discount <= 0.50){ System.out.format("%s批准了折扣:%2f%n",this.getClass().getName(),discount); }else{ successor.processDiscount(discount); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * CEO,可以批准55%以内的折扣,可以拒绝高于55%的折扣 */publicclass CEO extends Manager { @Override publicvoid 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); } } } package chengxuyuanzhilu.com.cor.handler; /** * @author 微信公众号:程序员之路 * 创建价格处理者工厂 */publicclass PriceHandleFactory { /* * 工程模式创建价格处理者 */publicstatic PriceHandler createPriceHandler() { //向上转型 PriceHandler sales = new Sales(); PriceHandler lead = new Lead();//业务变更 PriceHandler manager = new Manager(); PriceHandler director = new Director(); PriceHandler vicePresident = new VicePresident(); PriceHandler ceo = new CEO(); //指定后继销售者 sales.setSuccessor(lead); lead.setSuccessor(manager);//业务变更 manager.setSuccessor(director); director.setSuccessor(vicePresident); vicePresident.setSuccessor(ceo); return sales; } } package chengxuyuanzhilu.com.cor; import java.util.Random; import chengxuyuanzhilu.com.cor.handler.PriceHandleFactory; import chengxuyuanzhilu.com.cor.handler.PriceHandler; /** * @author 微信公众号:程序员之路 * 客户,请求折扣 */publicclass Customer { private PriceHandler priceHandler; publicvoid setPriceHandler(PriceHandler priceHandler) { this.priceHandler = priceHandler; } /* * 发送请求 */publicvoid requestDiscount(float discount) { priceHandler.processDiscount(discount); } //测试责任链模式publicstaticvoid main(String[] args) { Customer customer = new Customer(); customer.setPriceHandler(PriceHandleFactory.createPriceHandler()); Random rand = new Random(); for(int i=1;i<100;i++){ System.out.println(i+":"); customer.requestDiscount(rand.nextFloat()); } } }
原文:http://www.cnblogs.com/chengxuyuanzhilu/p/4691736.html
内容总结
以上是互联网集市为您收集整理的Java实现责任链模式全部内容,希望文章能够帮你解决Java实现责任链模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。