设计模式—模板方法模式
一、概念
模板方法模式在一个方法中定义算法骨架,而将一些步骤延迟到子类。模板方法使得子类在不改变算法骨架的前提下,重新定义算法中的某些步骤。
二、要点
- 模板方法中的非final方法(默认实现或不做事的方法)称为“钩子”。
- 钩子可以在子类的实现。
- 钩子可以让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应
- 工厂模式为模板方法模式的特例。
- 除了可以灵活应对子步骤的变化外,“不用调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
- 模板方法是代码复用的一项基本的技术,在类库中尤其重要。它遵循“抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据”的重构原则。
三、适用性
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke和Johnson所描述过的“重分解以一般化”的一个很好的例子。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
- 控制子类扩展。模板方法只在特定点调用Hook操作,这样就只允许在这些点进行扩展。