定义了一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。
行为结构
先做什么,再做什么,先定义出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public abstract class AbstractClass { public final void templateMethod() { operation1(); operation2(); if (hook()) { operation3(); } } protected abstract void operation1(); protected abstract void operation2(): protected abstract void operation3(): protected boolean hook() { return true; } }
|
模板方法,定义算法的框架。
钩子方法,这些方法在子类中可以选择性地实现。
抽象方法,需要子类实现。
钩子方法,默认实现。
总结
- 提高了代码的复用性。
- 符合开闭原则(OCP),扩展性强。
- 将算法的核心结构与具体实现分离。
说白了模板方法就是面向对象的抽象类实现。