阅读 75

设计模式连更(3)-模板方法模式

模板方法模式

概述

模板方法模式是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤

template-method.png

解决方案

模板方法模式建议将算法分解为一系列步骤,然后将这些步骤改写为方法,最后在模板方法中依次调用这些方法

一般有两种类型的步骤

  1. 抽象步骤必须由各个子类来实现

  2. 可选步骤已有一些默认实现,但仍可在需要时进行重写

还有一种名为钩子的步骤。钩子是内容为空的可选步骤,即使不重写钩子,模板方法也能工作。钩子通常放置在算法重要步骤的前后,为子类提供额外的算法扩展点

适用场景

  • 当你只希望客户端扩展某个特定算法步骤,而不是整个算法或其结构时,可使用模板方法模式

    模板方法将整个算法转换为一系列独立的步骤,以便子类能对其进行扩展,同时还可让超类中所定义的结构保持完整

  • 当多个类的算法除一些细微不同之外几乎完全一样时,你可使用该模式。但其后果就是,只要算法发生变化,你就可能需要修改所有的类

    在将算法转换为模板方法时,你可将相似的实现步骤提取到超类中以去除重复代码。子类间各不同的代码可继续保留在子类中

实现方式

  1. 分析目标算法,确定能否将其分解为多个步骤

  2. 创建抽象基类并声明一个模板方法和代表算法步骤的一系列抽象方法

  3. 虽然可将所有步骤全部设为抽象类型,但默认实现可能会给部分步骤带来好处,因为子类无需实现那些方法

  4. 可考虑在算法的关键步骤之间添加钩子

  5. 为每个算法变体新建一个具体子类,它必须实现所有的抽象步骤,也可以重写部分可选步骤

\


作者:谁是Lehends啊
链接:https://juejin.cn/post/7026593941851996174


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐