design-patterns - 理解模板方法模式

标签 design-patterns template-method-pattern

据我了解,模板方法不过是调用子类中定义的虚方法或抽象方法的普通方法。我是对的,还是我错过了关于此模式的其他重要内容?

abstract class Foo {
  public void IamTemplateMethod() { // which will be called in child class object
    method1(); // because this...
    method2(); // ...or this method was called in me
  }
  public virtual void method1() { ... } // to be overriden in child class
  public abstract void method2() { ... } // to be defined in child class
}

如果我是对的,还有其他常见的方法来实现模板方法吗?

最佳答案

是的。大多数模式没有什么特别的,只是看起来很适合某些情况的聪明方法,但仍然使用正常的 OO 原则(继承、多态、抽象等)。

模板方法的意思是,有时,您需要执行一些通用逻辑,并与一些特定于子类的逻辑交织在一起。所以你想为每个子类留下的具体逻辑被定义为一个抽象/虚拟方法,留给具体类来实现,而通用的业务逻辑围绕着它。

如果你想确保公共(public)逻辑不被覆盖你也可以将模板方法标记为不被覆盖(例如在Java中使用final关键字),这样你就可以确保您希望始终执行的通用代码始终被强制执行,同时允许子类覆盖您希望它覆盖的位。

将其视为文档模板。标题、页脚和通用元素将在那里固定且始终相同,然后使用特定文档的具体细节来填补两者之间的空白。

关于design-patterns - 理解模板方法模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015933/

相关文章:

java - 如何使用 Vaadin 框架在 Web 应用程序中构建正确的架构?请帮忙!

ios - 在 init 中操作由 Objective-C 中的子类设置的属性

design-patterns - 哪些设计模式可以应用于配置设置问题?

asp.net-mvc - 自定义 UserProfile 类 SimpleMembershipProvider

java - 我没有看到蝇量模式有任何用途。真的有用吗?

sql - 酒店预订系统 : optimal SQL db structure for querying

c++ - 是否可以在构造函数中使用模板方法模式?

c++ - 用其他基类的方法来满足纯抽象方法的最简单方法是什么

c# - 没有继承的模板方法模式