Spring整合JDBC模板方法设计模式之基于组合的实现

Spring整合JDBC模板方法设计模式之基于组合的实现


模板设计模式指的是将相应的模板方法提取出来在一个专门的一个位置定义,然后把相同调用过程的操作通过模板实现。
对于模板设计模式,一般有2中方式
1.基于继承的方式实现
2.基于组合的方式实现

前面实现了:1.基于继承的方式实现 ,Spring整合JDBC模板方法设计模式之基于继承的实现

接下来实现:2.基于组合的方式实现

Spring整合JDBC模板方法设计模式之基于组合的方法在我们有大量类的情况下使用特别方便。

此实现模拟了Spring中的org.springframework.jdbc.core.的JdbcTemplate 类。


在1的基础上创建模板类:MyJdbcTemplate,详细描述见代码。

package org.oms.spring.template;

public class MyJdbcTemplate {
	private void beginConnection() {
		System.out.println("begin connection!");
	}

	private void closeConnection() {
		System.out.println("close connection!");
	}

	/**
	 * 调用方法,传入一个钩子函数的接口
	 */
	public void execute(MyCallback callback) {
		beginConnection();
		callback.doInTemplate();
		closeConnection();
	}

	/**
	 * 将所有要实现的方法都创建在模板中 参数修改问相应的对象
	 */
	public void add(final Object object) {
		execute(new MyCallback() {

			@Override
			public void doInTemplate() {
				System.out.println("add " + object);

			}
		});
	}

	public void delete(final int id) {
		execute(new MyCallback() {

			@Override
			public void doInTemplate() {
				System.out.println("delete " + id);
			}
		});
	}

	public void update(final Object object) {
		execute(new MyCallback() {

			@Override
			public void doInTemplate() {
				System.out.println("update " + object);

			}
		});
	}
}

创建接口MyCallback

package org.oms.spring.template;

public interface MyCallback {
	
	public void doInTemplate();
	
}

修改1中的类MyJdbcTemplateByIn:
package org.oms.spring.template;

/**
 * 基于组合的实现模板设计模式
 * 
 * @author sunlight
 *
 */
public abstract class MyJdbcTemplateByIn {
	
	private MyJdbcTemplate mt=new MyJdbcTemplate();
	
	public void add(Object object){
		mt.add(object);
	}
	
	public void delete(int id){
		mt.delete(id);
	}
	
	public void update(Object object){
		mt.update(object);
	}
	
	public abstract void run();

	/**
	 * 在模板方法中有一种函数叫做钩子函数,钩子函数的作用是让实现类通过一些方法来控制模板中的流程
	 * 
	 * @return
	 */
	public abstract boolean isLog();

}

MessageDao.java 类和 RoleDao.java 类不变,具体参考1的实现。

测试类及结果:



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。