模板方法模式概念:
定义一个操作中算法的骨架,而将这些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
定义一个操作的算法框架,把一些步骤推迟到子类去实现。模板方法模式让子类不需要改变算法的结构而重新定义特定的算法步骤.
模板方法模式是通过把不变的的行为搬移到超类,去除子类中重复的代码来体现它的优势;当不变的和可变的行为在子类实现中混合在一起的时候,不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。此文描述的很好
(
设计模式之模板方法模式
)
引入回调:
模板方法模式应用很广,如果滥用将导致子类的泛滥。
在某种情况下,如果在开始的逻辑是相同的,只是在最后不一样,我们引入,回调机制。解决结果需要处理的问题。如,数据库的查询问题,只是在最后的ResultSet是需要处理,那么采用回调机制是比较OK的。
1、 ResultSetHander.java
import java.sql.ResultSet;
public interface ResultSetHander<T> {
public T handle(ResultSet rs);
}
2、 SimpleJDBCTemplete.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import utils.DB;
public class SimpleJDBCTemplete {
public <T>T query(String sql,ResultSetHander< T> hander) {
Connection connection=DB.getCon();
try {
PreparedStatement pst=connection.prepareStatement(sql);
ResultSet rs=pst.executeQuery();
System.out.println(1);
return hander.handle(rs);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
System.out.println(2);
}
return null;
}
}
3、
TestCallBack.java
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestCallBack {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleJDBCTemplete simpleJDBCTemplete=new SimpleJDBCTemplete();
simpleJDBCTemplete.query("select * from paper", new ResultSetHander<Boolean>() {
@Override
public Boolean handle(ResultSet rs) {
// TODO Auto-generated method stub
try {System.out.println(3);
while (rs.next()) {
System.out.println(".."+rs.getString(1));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
});
}
}
结果:
1
3
...
2
使用一个文件即可处理所有的查询的结果。
参考:
http://kim-miao.iteye.com/blog/1669310
http://book.jd.com/10910151.html