zoukankan      html  css  js  c++  java
  • 设计模式之生活中的模板模式总结篇

    模板模式总结篇

    在上一篇《设计模式之模板模式引导篇》中,我们使用了泡咖啡和泡茶的日常小场景讲解了模板模式的原理。本篇,我们就结合这个小案例,来对模板模式进行总结。

    本文出自《凯哥学设计模式》系列教程。作者:凯哥Java(kaigejava)

    凯哥个人博客:www.kaigejava.com

    一:模板模式定义(或内容)

    在上一篇中,我们知道泡茶和泡咖啡都需要五个步骤。这五个步骤,其实就是算法骨架。

    在具体是泡咖啡还是泡茶,是加牛奶还是加柠檬的时候,把这两个具体步骤延迟到具体真的子类中来实现了。这样就可以在不修改泡茶或泡咖啡的算法结构下,实现特定步骤。

    总结模板模式定义:

    先定义一个操作中的算法骨架,而将算法的某一个或者某些步骤的具体实现延迟到了子类中来实现,使得子类可以在不修改当前算法的结构情况下,重新定义当前算法的某些特定步骤。

    模板模式属于行为模式的一种

    二:角色

    抽象的基类

    实现某些具体步骤的子类

    关键代码:公共的代码在基类中实现(如:烧水、倒入杯中、送个客人这三个步骤就在基类hotdrink中实现的)

    其他步骤在具体子类中实现(如:是泡茶还是泡咖啡粉就是在具体的子类中实现的)

    三:使用场景

    在软件设计中,有些功能很类似,只是在某些环节不同而已。大多数环节都是相同的时候,可以使用模板模式。

    将通用的算法或者步骤抽取到抽象类中,在具体子类中实现具体特定的操作

    四:优缺点

    优点:

    封装不变的部分,将不变的部分抽取出来;

    扩展可变部分,将可变的设置抽象方法,让具体子类来实现。

    抽取的公共代码,便于后期维护

    行为有基类来控制,具体操作有子类实现。

    缺点:

    每一个不同的实现都需要有一个子类来实现,这样就会导致类的数量大大的增加,使得系统更加庞大。

    需要注意的地方:

    为了防止算法骨架被恶意的破坏或者恶意的操作,一般在使用模板模式的时候,模板方法都会加上final这个关键字来限制。

  • 相关阅读:
    BZOJ 1305 dance跳舞(最大流+二分答案)
    计蒜客 贝壳找房计数比赛(可重全排列+逆元)
    计蒜客 贝壳找房函数最值(好题,巧妙排序)
    Codeforces 463D Gargari and Permutations(求k个序列的LCS)
    Codeforces 552C Vanya and Scales(进制转换+思维)
    Codeforces 682C Alyona and the Tree (树上DFS+DP)
    Codeforces 332B Maximum Absurdity(DP+前缀和处理)
    Codeforces 981D Bookshelves(按位贪心+二维DP)
    Codeforces 225C Barcode(矩阵上DP)
    Codeforces 988F Rain and Umbrellas(DP)
  • 原文地址:https://www.cnblogs.com/kaigejava/p/11470988.html
Copyright © 2011-2022 走看看