java设计模式:责任链模式
来源:互联网 发布:星巴克糕点搭配知乎 编辑:程序博客网 时间:2024/06/18 00:01
责任链模式
将接收者对象连成一条链,并在该链上传递请求,直到有一个接收者对象处理他,通过让更多对象有机会处理请求,避免了请求发送者和接收者之间的耦合。
下面通过一个生活中的事例比如“申请折扣”来说明责任链模式。
你去买房子或买车,全款买的,所以想申请一个折扣,如果只是5%以内的折扣,普通的销售人员估计就能批准,但是如果你买的更多,想申请更大的折扣20%或30%等等,这就不是普通销售人员有权做决定的,这个“申请折扣”的请求必将上传,交给更上级的人处理请求。
客户类
//客户,申请折扣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的接待人员(sales)customer.setPricehandler(PiceHandlerFactory.createPriceHandler());Random rand=new Random();//申请10次折扣for(int i=1;i<=10;i++){System.out.print(i+":");customer.requestDiscount(rand.nextFloat());}}}
处理者抽象类
/* * 价格处理人,负责处理客户折扣申请 */public abstract class PriceHandler {protected PriceHandler successor;//后继,相当于链表中的后继,用于传递请求public void setSuccessor(PriceHandler successor) {this.successor = successor;}/* * 处理折扣申请 */abstract public void processDiscount(float discount);}
构造责任链类
public class PiceHandlerFactory {//为handler构造整个责任链(工厂函数)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;}}
Manager类
//销售经理,可以批准30%以内的折扣public class Manager extends PriceHandler {@Overridepublic void processDiscount(float discount) {if(discount<=0.3){System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount);}else{successor.processDiscount(discount);}}}
其他处理类就不一一贴出来了,只是批准折扣不一样。
Customer类main函数运行结果
阅读全文
1 0
- java设计模式---责任链设计模式
- Java责任链设计模式
- Java设计模式-责任链
- java设计模式-责任链
- java-设计模式-责任链
- java设计模式-责任链
- java设计模式之责任链模式
- JAVA系列-设计模式-责任链模式
- 责任链模式(JAVA设计模式)
- java设计模式之责任链模式
- Java设计模式-11-责任链模式
- Java 设计模式之责任链模式
- Java设计模式之责任链模式
- java 设计模式 -- 责任链模式
- 《Java设计模式》之责任链模式
- 《Java设计模式 》之责任链模式
- JAVA设计模式之:责任链模式
- 设计模式-责任链模式(Java)
- caffe windows 数据转换lmdb can not find file...
- 暑期集训之cake
- VUE 快速入门心得——组件开发
- 单例模式
- xml自定义实体
- java设计模式:责任链模式
- python关键字
- reqiure js 详解(二)
- ZOJ
- STM32F767+TB6600+57步进电机(升级版)
- 在 Linux/Unix/Mac 下清除 DNS 查询缓存
- 接口
- matlab2016a 中载入VLFeat 失败~
- Linux 用户管理和权利下放