java 模板类_设计模式之模板方法模式

为了巩固跟复习22个设计模式,每天不定时发表一篇关于设计模式的文稿!今天写的是行为模式中的“模板方法模式“!

  • 定义

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

  • 模板方法模式结构
48a43c7ef092dedb909742fe93d39e7e.png

模板方法模式结构图

  1. 抽象类 (Abstract­Class) 会声明作为算法步骤的方法, 以及依次调用它们的实际模板方法。 算法步骤可以被声明为 抽象类型, 也可以提供一些默认实现。
  2. 具体类 (Concrete­Class) 可以重写所有步骤, 但不能重写模板方法自身。
  • 适应场景
  1. 当你只希望客户端扩展摸个特定算法步骤,而不是整个算法或结构时,可使用模板方法模式。
  2. 当多个类的算法除一些细微不同之处之外几乎完全一样时,你可以使用该模式。但其后果就是,只要算法发生变化,你就可能需要修改所有的类。
  • 实现方式
  1. 分析目标算法,确定能否将其分解为多个步骤。 从所有子类的角度出发, 考虑哪些步骤能够通用, 哪些步骤各不相同。
  2. 创建抽象基类并声明一个模板方法和代表算法步骤的一系列抽象方法。 在模板方法中根据算法结构依次调用相应步骤。 可用 final最终修饰模板方法以防止子类对其进行重写。
  3. 虽然可将所有步骤全都设为抽象类型, 但默认实现可能会给部分步骤带来好处, 因为子类无需实现那些方法。
  4. 可考虑在算法的关键步骤之间添加钩子。
  5. 为每个算法变体新建一个具体子类, 它必须实现所有的抽象步骤, 也可以重写部分可选步骤。
  • 模板方法模式优缺点

优点:1)你可仅允许客户端重写一个大型算法中的特定部分, 使得算法其他部分修改对其所造成的影响减小。

2)你可将重复代码提取到一个超类中。

缺点: 1)部分客户端可能会受到算法框架的限制。

2)通过子类抑制默认步骤实现可能会导致违反_里氏替换原则。

3)模板方法中的步骤越多, 其维护工作就可能会越困难。

  • 在Java中模板方法的应用

* java.io.InputStream、 java.io.OutputStream、 java.io.Reader 和 java.io.Writer 的所有非抽象方法。

* java.util.AbstractList、 java.util.AbstractSet 和 java.util.AbstractMap 的所有非抽象方法。

* javax.servlet.http.HttpServlet, 所有默认发送 HTTP 405 “方法不允许” 错误响应的 do­XXX()方法。 你可随时对其进行重写。

  • 如何识别

模版方法可以通过行为方法来识别, 该方法已有一个在基类中定义的 “默认” 行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值