美文网首页
设计模式--模板方法模式

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

作者: jack_520 | 来源:发表于2018-08-14 23:46 被阅读0次

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

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

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

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

    void prepareRecipe(){

    boilWater();

    brew();

    pourInCup();

    addCondiments();

    }

    现在超类如下

    抽象类 咖啡类 茶类

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

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

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

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

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

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

    java 模板方法来排序。

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

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

    相关文章

      网友评论

          本文标题:设计模式--模板方法模式

          本文链接:https://www.haomeiwen.com/subject/zmubbftx.html