设计模式之责任链

 

essage从第一个链开始判断和处理,如果不能处理就传给下一个链,每一个链用handler表示。所有的链继承自同一个父类,Handler

 

使多个对象都有机会处理请求,从而避免请求的 发送者和接受者之间的耦合。将这些对象连成一个链,并按着这个链传递该请求,直到有一个对象处理他为止

 

public class Test {

 public static void main(String[] args) {
  
  Handler h1 = new BuyGoodsHandler();
  Handler h2 = new PayMoneyHandler();
  Handler h3 = new LogHandler();
  
  h1.setNextHandler(h2);
  h2.setNextHandler(h3);
  h2.setPreHandler(h1);
  
  Customer c = new Customer("lisi", h1);
  c.buy();
 }

 static class Customer{
  
  private String name;
  private Handler h;
  
  public Customer(String name, Handler h){
   this.name = name;
   this.h = h;
  }
  
  public void buy(){
   h.doHandler();
  }
 }
}

 

//买东西--付钱--记日志
public class BuyGoodsHandler implements Handler {
 
 private Handler nextHandler;

 public void doHandler() {
  try{
   System.out.println("1.买东西");
   //测试回退
//   int i=0;
//   i = 1/i;
   nextHandler.doHandler();
  }catch(Exception e){
   rollback();
  }
 }

 public void rollback() {
  System.out.println("1.回退");
 }

 public void setNextHandler(Handler nextHandler) {
  this.nextHandler = nextHandler;
 }

 public void setPreHandler(Handler preHandler) {
  
 }
}

 

public interface Handler {
 //业务处理
 void doHandler();
 //业务回退
 void rollback();
 
 void setPreHandler(Handler preHandler);
 
 void setNextHandler(Handler nexHandler);
}

 

public class LogHandler implements Handler {

 private Handler preHandler;
 
 public void doHandler() {
  try{
   System.out.println("3.记录日志");
   int i = 0;
   i = 1/i;
  }catch(Exception e){
   rollback();
  }
 }

 public void rollback() {
  System.out.println("3.回退");
  this.preHandler.rollback();
 }

 public void setPreHandler(Handler preHandler) {
  this.preHandler = preHandler;
 }

 public void setNextHandler(Handler nexHandler) {
  
 }
}

 

public class PayMoneyHandler implements Handler {

 private Handler preHandler;
 private Handler nextHandler;
 
 public void doHandler() {
  try{
   System.out.println("2.付钱");
//   int i=0;
//   i = 1/i;
   this.nextHandler.doHandler();
  }catch(Exception e){
   rollback();
  }
 }

 public void rollback() {
  System.out.println("2.回退");
  this.preHandler.rollback();
 }

 public void setPreHandler(Handler preHandler) {
  this.preHandler = preHandler;
  preHandler.setNextHandler(this);
 }

 public void setNextHandler(Handler nextHandler) {
  this.nextHandler = nextHandler;
  nextHandler.setPreHandler(this);
 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值