【发布时间】:2016-01-14 04:33:13
【问题描述】:
我正在阅读有关设计模式的内容,尤其是有关模板方法的内容,这时我的注意力被关于 SO 的this 问题引起了。
在阅读了解释和具体代码后,我仍然想知道为什么这是“模板方法”设计模式的示例。
根据 GoF 的说法,这种模式的意图是:
“在操作中定义算法的骨架,将一些步骤推迟到子类。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。”
并且有两个参与者:
抽象类:
- 定义具体子类定义的抽象原始操作以实现算法的步骤
- 实现定义算法骨架的模板方法。模板方法调用原始操作以及在 AbstractClass 中定义的操作或其他对象的操作。
具体类:
实现原始操作以执行算法的子类特定步骤。
为什么“JdbcOperations”中的代码被认为是“模板方法”设计模式?
- 我没有看到在超级/抽象类中定义了任何“全局/通用”算法,即使我将它与类似文件中的代码(如“JmsTemplate”)进行比较。
- 在具体类中实现的功能均未在超类中定义。所有定义的方法都是通过使用接口添加的,在本例中是接口“JdbcOperations”,实际上没有一个方法会覆盖父级中的方法。
我知道它是extremely handy for eliminating boilerplate code。但为什么这是一个模板方法,而不仅仅是一个漂亮的编码技巧。在我看来,它似乎没有模板方法所具有的任何特征。
【问题讨论】:
-
我认为你怀疑
JdbcTemplate是模板模式的一个例子是正确的(如链接问题中接受的答案所述)。 -
它封装了常见的 JDBC 代码(例如,tx 管理)并遵循回调而不是子类——我认为这种区别没有用。这可能不是一个很好的例子,但是嗯。
-
别忘了查看 SpringTemplate,它可以更轻松地使用 Spring 框架...
标签: java spring algorithm design-patterns template-method-pattern