一氛雪、使用模板模式優(yōu)化
使用模板模式主要是利用面向?qū)ο蟮睦^承特征,即把代碼不變的部分放在超類耸成,變化的部分放在子類
具體如下:
優(yōu)化查詢操作报亩、區(qū)分變化和不變的部分:
1浴鸿、sql和ResultSet的處理是變化部分,創(chuàng)建和釋放資源部分是不變部分捆昏。
2赚楚、提取超類,將不變的部分放入超類骗卜,變化的部分留給子類實(shí)現(xiàn)(可以寫成抽象方法)
實(shí)現(xiàn)超類的代碼如下:
public Object find(String sql, Object[] args) {
…
rs = ps.executeQuery();
if (rs.next()) return rowMapper(rs);
…
}
protected abstract Object rowMapper(ResultSet rs);
二宠页、使用策略模式優(yōu)化
和模板模式的主要區(qū)別是變化的部分改為用接口實(shí)現(xiàn),而不是重寫方法寇仓。
1举户、優(yōu)化查詢操作,區(qū)分變化和不變的部分:sql和ResultSet的處理是變化的部分遍烦,創(chuàng)建和釋放資源部分是不變的部分俭嘁。
2、提取接口封裝變化的部分服猪。
3供填、主要操作代碼如下:
public Object find(String sql, Object[] args, RowMapper rowMapper) {
…
rs = ps.executeQuery();
if (rs.next())return rowMapper.mapRow(rs);
…
}
//回調(diào)的接口
public interface RowMapper {
public Object mapRow(ResultSet rs) throws SQLException;
}
在調(diào)用 find方法時(shí)可以用匿名類實(shí)現(xiàn)接口的方法:
find(sql, args, new RowMapper(){
public Object mapRow(ResultSet rs) throws SQLException {
//實(shí)現(xiàn)具體對(duì)象的分析結(jié)果的代碼
}
});