我对他们的理解:
先看一个例子:
引用
jdbcTemplate.update()的源码
1. public int update(final String sql) throws DataAccessException {
2. Assert.notNull(sql, "SQL must not be null");
3. if (logger.isDebugEnabled()) {
4. logger.debug("Executing SQL update [" + sql + "]");
5. }
6.
7. class UpdateStatementCallback implements StatementCallback, SqlProvider {
8. public Object doInStatement(Statement stmt) throws SQLException {
9. int rows = stmt.executeUpdate(sql);
10. if (logger.isDebugEnabled()) {
11. logger.debug("SQL update affected " + rows + " rows");
12. }
13. return new Integer(rows);
14. }
15. public String getSql() {
16. return sql;
17. }
18. }
19. return ((Integer) <SPAN style="COLOR: #888888">execute</SPAN>(new UpdateStatementCallback())).intValue();
20. }
1. public Object execute(StatementCallback action) throws DataAccessException {
2. Assert.notNull(action, "Callback object must not be null");
3.
4. Connection con = DataSourceUtils.getConnection(getDataSource());
5. Statement stmt = null;
6. try {
7. Connection conToUse = con;
8. if (this.nativeJdbcExtractor != null &&
9. this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
10. conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
11. }
12. stmt = conToUse.createStatement();
13. applyStatementSettings(stmt);
14. Statement stmtToUse = stmt;
15. if (this.nativeJdbcExtractor != null) {
16. stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
17. }
18. Object result = <SPAN style="COLOR: #000000">action.doInStatement(stmtToUse);</SPAN>
19. handleWarnings(stmt.getWarnings());
20. return result;
21. }
22. catch (SQLException ex) {
23. // Release Connection early, to avoid potential connection pool deadlock
24. // in the case when the exception translator hasn't been initialized yet.
25. JdbcUtils.closeStatement(stmt);
26. stmt = null;
27. DataSourceUtils.releaseConnection(con, getDataSource());
28. con = null;
29. throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);
30. }
31. finally {
32. JdbcUtils.closeStatement(stmt);
33. DataSourceUtils.releaseConnection(con, getDataSource());
34. }
35. }
eg:A回调方法。B模板方法
怎样才能把B中的动态代码写成固定的啊?????
我们可以采用多态的方法,上面的代码就是采用多态的方法,
回调的方法是多态的(这样我们就可以写不同的代码了)
刚开时时,我认为模块和回调是为了代码的复用.我们可以把重复的代码写在模板中,把变化的写在回调方法中,
现在感觉模块和回调确实可以复用代码,但这不是他存在的主要原因。
谁能说说他主要的用途
貌似一切皆在他的名字中 模板(可以理解为相同的流程)
我们可以吧流程中不同的内容提取出来,
回调:貌似可以‘动态’的加入代码
希望高手来交流
分享到:
相关推荐
C++回调模板类的例子,利用模板和类的多态性来实现
复用和扩展是模板模式的两大作用,实际上,还有另外一个技术概念,也能起到跟模板模式相同的作用,那就是回调(Callback)。A 类事先注册某个函数 F 到 B类
自己的写类,感觉应该可以在大部分项目中通用
本程序解决了bcb中回调函数的实用问题,可以当模板套用。代码有一定的注释,简单易懂,至少对于学BCB的人来说,是网上找不到的例子! Form1->ProgressBar1->Position=0; pMyCallback=new callthread(false); //...
NULL 博文链接:https://gutou9.iteye.com/blog/286812
19.C#中委托、事件和回调函数的理解.pdf 19.C#中委托、事件和回调函数的理解.pdf
NULL 博文链接:https://zhang23242.iteye.com/blog/1904116
一、回调的实现(模板方法模式)定义:设计操作的算法骨架,将某些步骤延迟到子类中实现(自定义性质很强)。//搭建骨架public final void proce
自己前段时间在做微信,刚刚开始企业号回调模式验证总是出问题,找了很多代码,结果都不行,本人现在整理了一个完整的回调模式的验证代码,只需改三个参数即可。
这里面有两个运用回调函数的DEMO程序 1.其中tcCallBack的作用是希望通过将Receiver类的...2.另外一个tcFunctionTemplate是使用std::function模板和std::bind,支持全局和类成员函数作为回调函数,我在VS2010下编译通过
java的23种常用设计模式:模板方法模式
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
eclipse注释模板 xml格式模板 附修改模板方法 和java注释使用方法
模板方法模式的示例代码和文档,学习模板方法模式的参考资料。
模板方法设计模式,内含代码和注释还有模板方法的设计原理
适合20分钟左右讲解的模板方法模式。 自己上课用的。
模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中。 在模板方法模式中,我们...
一篇关于C++模板 设计模式 软件架构的文档,里面实现了一个泛化的命令模式和观察者模式
模板方法模式Demo