Java用户回调方法消除冗余代码

一. 看一段冗余的代码

public String login(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
Connection conn=null;
try{
     
Conection conn =DBManager.getConnection();
    
   if(webContext.getOperatorName.equals("123")){
          // 登陆成功
      }

}catch(Throwable t){
   //记录日志
//跳转到统一的错误页面,不能让用户看到异常页面
       //关闭Connection
       if(conn!=null){
           try{conn.close();}cath(SQLException ex){}
     }
   }

}

public String logOut(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
try{
      
Conection conn =DBManager.getConnection();
        operatorService.logout();
     
request.getSession().invalidate();
}catch(Throwable t){
   //记录日志
//跳转到统一的错误页面,不能让用户看到异常页面
       //关闭Connection
       if(conn!=null){
           try{conn.close();}cath(SQLException ex){}
     }

   }
}



二、可以看到,红色部分代码完全是冗余的,下面用回调方法简化这部分代码


1.先定义一个回调抽象类
public abstract class AppCallback {

    /**
    * 回调执行方法
    *
    * @return
    */
    public String execute() {
      Connection conn=null;
       try{
           conn= DBManager.getConnection();
       this.doLogic(conn);
       catch(Throwable t){
          //记录日志
   //跳转到统一的错误页面,不能让用户看到异常页面
         //关闭Connection
     if(conn!=null){
         try{conn.close();}cath(SQLException ex){}
         }

      }
    }

    /**
    * 业务代码,由子类实现
    *
    * @param xmlResponse
    * @param webContext
    */
    public abstract void doLogic(Connection conn);

}



三、用回调类简化代码

public String login(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
     new AppCallback(){
          public void doLogic(Connection conn){
                // conn.executeQuery()
          }
    }.execute();
}

public String logOut(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
new AppCallback(){
          public void doLogic(Connection conn){
                 // conn.executeQuery()
          }
    }.execute();
}

 

文章來源:http://hi.baidu.com/luodaijun/blog/item/ce1cccef6acb173eadafd518.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值