了解模板方法模式

Jan*_*roň 2 design-patterns template-method-pattern

据我所知,Template方法只不过是调用子类中定义的虚方法或抽象方法的普通方法.我是对的,或者我想念这个模式还有其他重要的东西吗?

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
}
Run Code Online (Sandbox Code Playgroud)

如果我是对的,有没有其他常用方法来实现Template方法?

jbx*_*jbx 7

是.大多数模式都没有什么特别之处,但只是智能方法似乎很适合某些情况,但仍然使用正常的OO原则(继承,多态,抽象等).

模板方法所说的有时候,你需要做一些常见的逻辑,一些子类特定的逻辑与之交织.因此,您希望为每个子类留下的特定逻辑被定义为一个抽象/虚拟方法,留给具体类实现,而常见的业务逻辑绕过它.

如果要确保不覆盖公共逻辑,还可以将模板方法标记为不被覆盖(final例如,使用Java中的关键字),因此确保始终强制执行您希望始终执行的公共代码,同时允许子类覆盖您想要的位.

可以把它想象成一个文档模板.标题,页脚和公共元素将在那里固定并始终相同,然后具体详细说明特定文档用于填充其间的空白.