当我的注意力被 SO 上的这个问题吸引时,我正在阅读有关设计模式的内容,特别是有关模板方法的内容。
在阅读了解释和具体代码之后,我仍然想知道为什么这是“模板方法”设计模式的一个例子。
根据 GoF 的说法,这种模式的意图是:
“在操作中定义算法的骨架,将一些步骤推迟到子类。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。”</p>
并有两个参与者:
AbstractClass :
- 定义具体子类定义的抽象原始操作以实现算法的步骤
- 实现定义算法骨架的模板方法。模板方法调用原始操作以及在 AbstractClass 中定义的操作或其他对象的操作。
ConcreteClass:
实现原始操作以执行算法的子类特定步骤。
为什么“JdbcOperations”中的代码被认为是“模板方法”设计模式?
- 我没有看到在超级/抽象类中定义了任何“全局/通用”算法,即使我将它与类似文件中的代码(如“JmsTemplate”)进行比较。
- 在具体类中实现的功能都没有在超类中定义。所有定义的方法都是通过使用接口添加的,在本例中是接口“JdbcOperations”,实际上没有一个方法会覆盖父级中的方法。
我知道它对于消除样板代码非常方便 。但为什么这是一个模板方法,而不仅仅是一个漂亮的编码技巧。对我来说,它看起来不像模板方法所具有的任何特征。