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