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的实现。
测试类及结果: