圣诞大减价开始了!

表单模板法

问题

子类实现的算法以相同的顺序包含类似的步骤。

解决方案

将算法结构和相同的步骤移到超类中,并将不同步骤的实现留在子类中。

之前
表单模板方法-之前
表单模板方法-之后

为什么重构

子类是并行开发的,有时是由不同的人开发的,这导致了代码重复、错误和代码维护方面的困难,因为每个更改都必须在所有子类中进行。

好处

  • 代码复制并不总是指简单的复制/粘贴。复制通常发生在更高的级别,例如当您有一个用于对数字进行排序的方法和一个用于对仅通过元素比较进行区分的对象集合进行排序的方法时。创建模板方法可以消除这种重复,方法是在超类中合并共享算法步骤,只在子类中保留差异。

  • 形成模板方法就是一个例子打开/关闭原则在行动。当一个新的算法版本出现时,你只需要创建一个新的子类;不需要对现有代码进行更改。

如何重构

  1. 将子类中的算法拆分为用单独的方法描述的组成部分。提取方法能帮上忙。

  2. 对于所有子类都相同的结果方法可以通过移动到超类上拉法

  3. 不相似的方法可以通过重命名方法

  4. 使用将不相似方法的签名作为抽象方法移动到超类上拉法.将它们的实现留在子类中。

  5. 最后,将算法的主方法拉到超类中。现在它应该与超类中描述的方法步骤一起工作,包括真实的和抽象的。

Baidu
map