模板方法和回调方法的困惑

我对他们的理解:
先看一个例子:

[quote]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 [color=blue]doInStatement([/color]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. [color=red]public Object execute(StatementCallback action) throws DataAccessException[/color] {
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. } [/quote]

eg:A回调方法。B模板方法

怎样才能把B中的动态代码写成固定的啊?????
我们可以采用多态的方法,上面的代码就是采用多态的方法,

回调的方法是多态的(这样我们就可以写不同的代码了)


刚开时时,我认为模块和回调是为了代码的复用.我们可以把重复的代码写在模板中,把变化的写在回调方法中,
现在感觉模块和回调确实可以复用代码,但这不是他存在的主要原因。

谁能说说他主要的用途
貌似一切皆在他的名字中 模板(可以理解为相同的流程)
我们可以吧流程中不同的内容提取出来,
回调:貌似可以‘动态’的加入代码

希望高手来交流
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值