表单模板法
问题
子类实现的算法以相同的顺序包含类似的步骤。
解决方案
将算法结构和相同的步骤移到超类中,并将不同步骤的实现留在子类中。
之前

后

为什么重构
子类是并行开发的,有时是由不同的人开发的,这导致了代码重复、错误和代码维护方面的困难,因为每个更改都必须在所有子类中进行。
好处
代码复制并不总是指简单的复制/粘贴。复制通常发生在更高的级别,例如当您有一个用于对数字进行排序的方法和一个用于对仅通过元素比较进行区分的对象集合进行排序的方法时。创建模板方法可以消除这种重复,方法是在超类中合并共享算法步骤,只在子类中保留差异。
形成模板方法就是一个例子打开/关闭原则在行动。当一个新的算法版本出现时,你只需要创建一个新的子类;不需要对现有代码进行更改。