[align=center][b]Template Method Pattern[/b][/align]
1、模版介绍
我们在使用JDBC的时候时常会遇到这种的问题,那就是很多操作代码是重复的,每次都写一遍又比较麻烦,那我们怎样去处理呢?可以使用模版模式来进行封装。(当然还有很多其它的方法,此处只是为了讲解模版模式,所以不对其它方式进行说明,例如:你可以封装一个专门对数据库进行操作的DB类)
2、模版类
3、Callback接口
1、模版介绍
我们在使用JDBC的时候时常会遇到这种的问题,那就是很多操作代码是重复的,每次都写一遍又比较麻烦,那我们怎样去处理呢?可以使用模版模式来进行封装。(当然还有很多其它的方法,此处只是为了讲解模版模式,所以不对其它方式进行说明,例如:你可以封装一个专门对数据库进行操作的DB类)
2、模版类
package com.hpu.template;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import com.hpu.callback.Callback;
public class Template {
/**
* 此处为模版方法
* 只要传入一个自己需要实现功能的回调类
* 就能在你要实现功能的前后加上模版的内容
*/
public void doTemplate(Callback callback) {
Connection conn = null;
Statement stmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/template","root","***");
stmt = conn.createStatement();
//stmt.execute("insert into test values(null,'test'");
/*
* 整个doTemplate是一个模版
* 传入一个回调类(钩子类)
* 让回调类去实现具体所要做的操作
*/
callback.doInTemplate(stmt);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/*
* 用于测试的方法
* 里面传入一个匿名的实现了Callback接口的类
*/
public static void main(String[] args) {
new Template().doTemplate(new Callback() {
@Override
public void doInTemplate(Statement stmt) throws SQLException {
stmt.execute("insert into test values(null , 'test')");
}
});
}
}
3、Callback接口
package com.hpu.callback;
import java.sql.SQLException;
import java.sql.Statement;
public interface Callback {
public void doInTemplate(Statement stmt) throws SQLException;
}