定义一个操作中算法的骨架,将一些步骤放在子类实现,使得子类可以不改变一个算法结构即子类可以重定义该算法的某些特定步骤。

主要有两个角色:

  1. 抽象模板 :是一个抽象类,并实现了一个具体模板方法,这个方法中会定义算法的骨架,其中一些步骤是引用抽象模板中的抽象方法,定义了算法的结构。

  2. 具体模板 :是一个具体类,是抽象类的子类,重写父类中抽象方法,这样就在不改变抽象模板中算法步骤的情况下,给出了算法的具体实现。

UML类图如下所示:

  

  一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。抽象类给出一个空实现作为此方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook”。显然,这种默认钩子方法在缺省适配模式里面已经见过了,一个缺省适配模式讲的是一个类为一个接口提供一个默认的空实现,从而使得缺省适配类的子类不必像实现接口那样必须给出所有方法的实现,因为通常一个具体类并不需要所有的方法。

  钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。在上面的例子中,钩子方法hookMethod()应当以do开头;在HttpServlet类中,也遵从这一命名规则,如doGet()、doPost()等方法。

模板模式的优点:

(1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。

 (2)代码复用的基本技术,在数据库设计中尤为重要。

 (3)存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。

模板模式的缺点:

  每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大。

最新文章

  1. SQLServer2008部署镜像
  2. java 中for each语句
  3. JavaScript及C# URI编码详解
  4. iOS一分钟学会环形进度条
  5. OK335xS tmp75 Qt 温度读取
  6. 黑马程序员_<<IO流基本操作(Writer,Reader)>>
  7. 《accelerated c++》---------第六章
  8. HTML <img>标签 创建图像映射
  9. ATM+购物商城完整版
  10. java的3大特性
  11. java 五十条数据分为一组
  12. Jquery 字符串转数字
  13. 获取Gitlab项目的Token
  14. 分享:基于Dracula+Zenburn 自定制的pycharm主题配色文件
  15. android 命令行安装apk
  16. Git:远程仓库的使用
  17. JDK1.6新特性,基础类库篇,Jar与Zip增强
  18. Subsequence---poj3061(尺取法||二分)
  19. php中直接执行mysqli_init()也是报Property access is not allowed yet的错误。
  20. Linux 环境下用Tomcat 发布项目

热门文章

  1. SpringCloud:搭建微服务项目框架 microservicecloud
  2. layui select 下拉框 级联 动态赋值 与获取选中值
  3. mac PHP安装imageMagic扩展
  4. postgre查询表和记录数,查表字段
  5. JDBC DataSource
  6. linux部署php网页
  7. Flink FileSink 自定义输出路径——BucketingSink
  8. C# 实现生产者消费者队列 (转)
  9. Top 10 Machine Learning Algorithms For Beginners
  10. LODOP指定window默认打印机和临时默认打印机