英文网站制作++官网,网站设计中怎么做二级页面,百度竞价推广技巧,17网站一起做网店普责任链设计模式
定义#xff1a;
又名职责链模式#xff0c;为了避免请求发送者与多个请求处理者耦合在一起#xff0c;将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链#xff1b;当有请求发生时#xff0c;可将请求沿着这条链传递#xff0c;直到…责任链设计模式
定义
又名职责链模式为了避免请求发送者与多个请求处理者耦合在一起将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链当有请求发生时可将请求沿着这条链传递直到有对象处理它为止。
比较常见的springmvc中的拦截器web开发中的filter过滤器
结构
职责链模式主要包含以下角色:
抽象处理者Handler角色定义一个处理请求的接口包含抽象处理方法和一个后继连接。具体处理者Concrete Handler角色实现抽象处理者的处理方法判断能否处理本次请求如果可以处理请求则处理否则将该请求转给它的后继者。客户类Client角色创建处理链并向链头的具体处理者对象提交请求它不关心处理细节和请求的传递过程。
下面代码以订单入库验证流程演示责任链模式在开发当中的实际应用
抽象处理者
/*** 抽象处理者*/
public abstract class Handler {protected Handler handler;public void setNext(Handler handler) {this.handler handler;}/*** 处理过程* 需要子类进行实现*/public abstract void process(OrderInfo order);
}订单信息类
public class OrderInfo {private String productId;private String userId;private BigDecimal amount;
}具体处理者
/*** 订单校验*/
public class OrderValidition extends Handler {Overridepublic void process(OrderInfo order) {System.out.println(校验订单基本信息);//校验this.handler.process(order);}
}/*** 补充订单信息*/
public class OrderFill extends Handler {Overridepublic void process(OrderInfo order) {System.out.println(补充订单信息);this.handler.process(order);}
}/*** 计算金额*/
public class OrderAmountCalcuate extends Handler {Overridepublic void process(OrderInfo order) {System.out.println(计算金额-优惠券、VIP、活动打折);this.handler.process(order);}
}/*** 订单入库*/
public class OrderCreate extends Handler {Overridepublic void process(OrderInfo order) {System.out.println(订单入库);}
}客户类
public class Application {public static void main(String[] args) {//检验订单Handler orderValidition new OrderValidition();//补充订单信息Handler orderFill new OrderFill();//订单算价Handler orderAmountCalcuate new OrderAmountCalcuate();//订单落库Handler orderCreate new OrderCreate();//设置责任链路orderValidition.setNext(orderFill);orderFill.setNext(orderAmountCalcuate);orderAmountCalcuate.setNext(orderCreate);//开始执行orderValidition.process(new OrderInfo());}
}总结
其实这段代码完全可以写成一段代码的形式,我们这里使用责任链模式做拆饭是为了遵循软件设计中的开闭原则,否则完全不需要这样从子类一路层层调用