设计模式--模板方法模式

前面讨论的都是封装,我们封装了对象的创建、方法的调用、复杂接口等,接下来我们要深入封装算法块,让子类可以把自己挂进运算里。

假设我们要跑茶和泡咖啡,他们中有一部分方法是相同的,一部分是有区别的,那么我们可能如下设计:


让我们再进一步分析,上面的brew(冲泡)与steep(浸泡)差异不大,所以给他们换个名字,直接用brew().同理,也可以把addSugarAndMilk()与addLemon()改成addCondiments()好了。

现在prepareRecipe()方法就变成了如下:

void prepareRecipe(){

boilWater();

brew();

pourInCup();

addCondiments();

}

现在超类如下


抽象类


咖啡类


茶类

上面就是模板方法设计模式, prepareRecipe()是我们的模板方法,为什么呢?因为1.它是个方法,2、它用作一个算法的模板,在这个例子中,算法是用来制作咖啡饮料。

模板方法定义了一个算法的步骤,并允许子类为一个或者多个步骤提供实现。

定义模板方法:在一个方法中定义了一个算法的骨架而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。直接点说,模板就是一个方法。更具体地说,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,子类负责实现,这样可以确保算法的结构保持不变,同时有子类提供部分实现。



现在还可以给模板方法加个钩子方法,


ps:注意算法内步骤不要切割得太细,但步骤太少,又缺少弹性,所以要看情况定。某些步骤是可选 ,可以将这些步骤定义成钩子,而不是实现成为抽象方法,这样可以让抽象类的子类的负荷减轻。

ps:设计原则(好莱坞原则)别调用(打电话给)我们。我们会调用(打电话给)你。

java 模板方法来排序。

java数组类设计者提供我们一个模板方法来排序


比较模板方法与策略模式:

推荐阅读更多精彩内容

  • 目录 本文的结构如下: 引言 什么是模板方法模式 模式的结构 代码示例 优点和缺点 适用环境 模式应用 一、引言 ...
    w1992wishes阅读 566评论 0 3
  • 概述   模板方法(Template method)模式,定义了一个算法的步骤,并允许子类为算法中的某些步骤提供实...
    骑着乌龟去看海阅读 201评论 2 2
  • TEMPLATE METHOD(模板方法) ———— 类行为型模式 意图 定义一个操作中的算法骨架,而将一些步骤延...
    tomas家的小拨浪鼓阅读 838评论 0 2
  • 设计模式:模板方法模式 定义:模板方法模式在一个方法中定义了一个算法的固件,而将一些步骤延迟到子类中。模板方法使得...
    CloudHunter阅读 179评论 0 0
  • 定义 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象...
    步积阅读 626评论 0 0
  • 童年是那山花烂漫中奔跑, 童年是那小溪里倦恋, 童年是那冰天雪地欢笑, 童年还是那与哥哥 草塘里蹦跳没完… 童年是...
    凤兮2阅读 171评论 0 4
  • No 1.哥,我想爸爸了 【首都 新月别墅】 “佳佳,吃饭了。”陆幽宇敲了敲妹妹陆佳佳的卧室门。“佳……”他正要说...
    Sophia泠雪阅读 182评论 0 1
  • 1 匆匆忙忙的考试周终于结束了,自己也终于迎来了暑假,学校七月中旬才放假的,正赶上三伏天的光顾,顶着热烈的太阳也不...
    桦小絮阅读 688评论 9 8