《Spring中的模板设计模式》

  Spring中有很多带template结尾的类,比如jdbcTemplate、hibernateTemplate等对数据库操作的类,它们就使用到了模板模式,但是spring并没有使用继承的方式来实现模板模式,而是采用组合的方式是的使用更加方便、更易于扩展。


  先使用继承的方式模拟一下jdbcTemplate,伪代码如下:

//抽象模板类
public abstract class MyJdbcTemplate {
	public void execute(String sql){
		//获得连接
		getConnection();
		
		//对数据库的具体操作
		doStatement(sql);
		
		//释放资源
		release();
		
	}
	public abstract void doStatement(String sql);
	public void getConnection(){
	}
	public void release(){
	}
}
  只要子类继承该类,并且实现doStatement(String sql)方法,就可以实现对数据库的操作,获得连接和释放资源都将给模板来做,但是每次对对数据库的操作都需要继承,很麻烦。Spring的jdbcTemplate采用了组合和 回调函数。回调函数就是在方法参数中传递一个接口,调用方法时必须传递该接口的实现类。我们在使用代码来模拟一下:

//回调接口
public interface MyStatementCallBack {
	Object doStatement(Statement stmt);
}

//模板类,不再是抽象类
public  class MyJdbcTemplate {
	//执行sql语句的模板
	public Object execute(MyStatementCallBack action) throws Exception{
		//获得连接
		Connection conn = getConnection();
		Statement stmt = conn.createStatement();
		//执行数据库操作
		Object obj = action.doStatement(stmt);
		//释放连接
		release();
		return obj;
	}
	//获得连接
	public Connection getConnection(){
		return null;
	}
	//关闭资源
	public void release(){
	}
}

//调用execute方法
	public static void main(String[] args)throws Exception {
		MyJdbcTemplate mt = new MyJdbcTemplate();
		//传入回调接口的实现类
		mt.execute(new MyStatementCallBack() {
			@Override
			public Object doStatement(Statement stmt) {
				//具体的实现...
				return null;
			}
		});
	}
  相比之下,这种方式使用起来更加简洁。

猜你喜欢

转载自blog.csdn.net/eragon444668/article/details/76403085
今日推荐