了解模板方法模式

时间:2014-02-25 13:41:25

标签: 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
}

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

2 个答案:

答案 0 :(得分:6)

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

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

如果你想确保不覆盖公共逻辑,你也可以标记模板方法不被覆盖(例如用Java中的final关键字),所以你要确保公共代码你总是强制执行,同时允许子类覆盖你想要的位。

将其视为文档模板。标题,页脚和公共元素将固定并始终相同,然后具体文档的具体细节用于填补其间的空白。

答案 1 :(得分:2)

模板模式为该方法的所有子项提供了一个公共序列。因此,模板模式定义了一个告诉执行顺序的最终方法。

abstract class Foo {
    public void final initilialize(){
        method1();
        method2();
        method3();
    }
    public void method1(){...}
    public void method2(){...}
    public void method3(){...}
}

现在子类可以扩展Foo类。参考可以创建为:

Foo obj1=new child();

有关详细信息,请查看http://www.tutorialspoint.com/design_pattern/template_pattern.htm