据我所知,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
}
如果我是对的,有没有其他常用的方法来实现模板方法?
答案 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