一、使用模板模式优化
使用模板模式主要是利用面向对象的继承特征,即把代码不变的部分放在超类,变化的部分放在子类
具体如下:
优化查询操作、区分变化和不变的部分:
1、sql和ResultSet的处理是变化部分,创建和释放资源部分是不变部分。
2、提取超类,将不变的部分放入超类,变化的部分留给子类实现(可以写成抽象方法)
实现超类的代码如下:
public Object find(String sql, Object[] args) {
…
rs = ps.executeQuery();
if (rs.next()) return rowMapper(rs);
…
}
protected abstract Object rowMapper(ResultSet rs);
二、使用策略模式优化
和模板模式的主要区别是变化的部分改为用接口实现,而不是重写方法。
1、优化查询操作,区分变化和不变的部分:sql和ResultSet的处理是变化的部分,创建和释放资源部分是不变的部分。
2、提取接口封装变化的部分。
3、主要操作代码如下:
public Object find(String sql, Object[] args, RowMapper rowMapper) {
…
rs = ps.executeQuery();
if (rs.next())return rowMapper.mapRow(rs);
…
}
//回调的接口
public interface RowMapper {
public Object mapRow(ResultSet rs) throws SQLException;
}
在调用 find方法时可以用匿名类实现接口的方法:
find(sql, args, new RowMapper(){
public Object mapRow(ResultSet rs) throws SQLException {
//实现具体对象的分析结果的代码
}
});