乐趣区

关于设计模式:Head-First-设计模式-09-模版方法-Template-Method-模式

模板办法模式

在一个办法中定义一个算法的骨架,而将一些步骤提早到子类中。模板办法使得子类能够在不扭转算法构造的状况下,从新定义算法中的某些步骤。P289

特点
  • 主导算法框架,并且爱护这个算法 P288
  • 最大化复用代码 P288
  • 算法只存在于一个中央,容易批改 P288
  • 专一算法自身,由子类提供残缺的实现 P288
  • 模板办法自身和外部具体操作解耦 P289

设计准则

好莱坞准则 :低层组件别调用高层组件,让高层组件调用低层组件。P296

长处
  • 避免依赖糜烂(依赖糜烂会使用户难以弄懂零碎的设计)P296

思考题

还有哪些模式采纳了好莱坞准则?P297

  • 工厂办法、观察者
  • 形象工厂、外观、命令

思考题

咱们晓得应该多用组合,少用继承。sort() 模板办法的实现决定不应用继承,sort 办法被实现成一个动态的办法,在运行时和 Comparable 组合。这样的做法有何优缺点?你如何处理这个难题?难道 Java 数组让这所有变得特地麻烦吗?P305

长处
  • 解耦了数组和对象,防止让对象数组继承数组
毛病
  • 可排序数组的对象必须是 Comparable 的子类,比拟逻辑没法动静扭转

    • 能够采纳 Comparator 接口,该接口承受两个待比拟的对象,返回比拟后果;并在 sort 办法加上一个 Comparator 参数
难道 Java 数组让这所有变得特地麻烦吗?
  • Java 数组不是将这所有变得麻烦的次要起因,而是 Java 数组和对象数组的没有太多的分割,不能有太多耦合,所以不应该应用继承。(如果对象数组继承 Java 数组,则要求对象自身是 Comparable 的子类,极大地限度了数组的应用场景和范畴)

思考题

想一想另一个模式,它是模板办法的一种非凡状况,原语操作用来创立并返回对象。这是什么模式?

  • 工厂办法模式、形象工厂模式

所思所想

  • 感觉模板办法就是在外部委托了多个策略,交给子类实现具体策略。其实平时写代码中,常常无心中会用到这种思维。比方在解决 excel 文件导入时,步骤绝对固定,先进行各种校验,而后解决 excel 文件(依据申请的不同解析成不同的对象入库),最初返回导入后果。过后我就把解决 excel 文件这步抽出来,顺便应用了一下函数式接口。
public Result handleExcel(File excelFile, ExcelConsumer consumer) {
    // 各种校验
    
    boolean success = consumer.consume(excelFile);
    
    // 构建后果封装对象,并返回
}

本文首发于公众号:满赋诸机(点击查看原文)开源在 GitHub:reading-notes/head-first-design-patterns

退出移动版