Spring框架中设计模式之 模板方法模式

模板方法模式:Spring 中的 JdbcTemplate 类使用了模板方法模式,定义了一个通用的数据库操作模板,将不同的数据库操作实现交给子类来完成。

public abstract class JdbcTemplate {
  public <T> List<T> query(String sql, RowMapper<T> rowMapper) {
    Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;
    List<T> result = null;
    try {
      conn = getConnection();
      stmt = conn.prepareStatement(sql);
      setParameters(stmt);
      rs = stmt.executeQuery();
      result = new ArrayList<T>();
      while (rs.next()) {
        result.add(rowMapper.mapRow(rs));
      }
    } catch (Exception e) {
      handleException(e);
    } finally {
      closeResultSet(rs);
      closeStatement(stmt);
      closeConnection(conn);
    }
    return result;
  }

  protected abstract Connection getConnection() throws SQLException;
  protected abstract void setParameters(PreparedStatement stmt) throws SQLException;
  protected abstract void handleException(Exception e);
  protected void closeResultSet(ResultSet rs) { /* ... */ }
  protected void closeStatement(Statement stmt) { /* ... */ }
  protected void closeConnection(Connection conn) { /* ... */ }
}

在上述代码中,JdbcTemplate 类是一个抽象类,定义了一个通用的数据库操作模板,其中 query 方法就是一个模板方法,使用了钩子方法(如 getConnection、setParameters、handleException 等)来完成不同的数据库操作,具体的数据库操作实现交给子类来完成。这种设计可以让代码更加简洁,同时也更加易于维护和扩展。