文章目录

  • 概述
  • 如何区别
  • 参考

概述

策略模式与模板模式在Spring中都广泛存在:

  • JDBCTemplate、RedisTemplate、MongoTemplate等均是典型的模板模式。
  • Spring MVC中各种处理handler,是典型的策略模式。

这两个模式感觉差不多,这两个模式怎么区别呢?

如何区别

策略模式和模板模式有一个最重要的区别,即模板模式一般只针对一套算法,注重对同一个算法的不同细节进行抽象提供不同的实现。而策略模式注重多套算法多套实现,在算法中间不应该有交集,因此算法和算法只间一般不会有冗余代码!

举个例子来说,我们知道 FreeMarker 是一个是一个模板引擎,一个基于模板生成文本输出的通用工具,当你设计一个页面的时候,提前写个html模版,假设是一个产品的详情页,那么包含价格、产地、名称、描述等属性信息,而他们的布局是固定的,因此,只要能获取不同商品的动态属性信息,填充到html模版里面,可以快速得到一个Html页面,这就是模版模式。

总结模版模式的特点:从头至尾,各个属性的位置都是固定的,是一个大而全的东西,固定了流程,按照模版来就行。各个抽象方法都是不重复的功能,有的渲染头部,有的选择底部。

再举个策略模式的例子。

对于展示信息给用户的浏览器来说,需要一个内容供自己渲染,那么这个页面是怎么来的呢?后台可以提供多种方案,可以是一个html静态页面,也可以是Servlet 生成的响应:

public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("处理Get()请求...");//使servlet页面中文不会乱码,一定要放在getWriter()方法前面resp.setContentType("text/html; charset=utf-8");//添加上面这行才会解析html代码,显示Get()请求成功!的加粗模式,否则不会解析html代码,直接显示html标签PrintWriter out = resp.getWriter();out.println("<strong>Get()请求成功!</strong><br/>");}

这个响应可以是一个html页面,也可以是一个Html片段。

没关系,只要是符合html语法规则的就行,因此,这里的不同方案就对应一种策略。

总结策略模式的特点:是针对同一个算法,有不同的实现。各个策略完成的功能是重复的,同一时间,只能选择其中的一种,即互斥的。

参考

策略模式与模板模式的区别

【设计模式】策略模式与模板模式的区别相关推荐

  1. java策略模式模板区别,策略模式与模板模式的区别

    已经很久没更新了,在这期间经历了准备面试.面试.离职又入职的过程,目前已经入职接近2个月,虽说从离职到入职只间隔了4天还包括一个周末.但入职后新工作这段时间还是给我带来了不一样的感悟,抽空我会单独&q ...

  2. SSM源码分析之23种设计模式(策略模式和模板模式)

    23种设计模式之策略模式和模板模式 目录 策略模式使用场景 策略模式实现 模板模式 目录 策略模式使用场景 策略模式:根据用户的需求处理数据时候需要对算法做出选择,固定的一些算法(不再发生变化的算法) ...

  3. 策略模式、模板模式实战

    设计模式实战第一讲 本篇从实战代码角度详解策略模式.模板模式这两种设计模式. 简介 软件设计模式(Design pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  4. 设计模式:行为型-模板模式

    目录 第一章 模板模式介绍 第二章 模板模式实现 2.1.抽象父类 2.2.具体子类 2.3.测试类 第三章 模板模式应用 项目地址:https://gitee.com/caochenlei/desi ...

  5. 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式(Factory pattern) 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是 ...

  6. 拿捏大厂面试,设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是Java 中比较常见的一种设计模式 ...

  7. 【设计模式】【行为型模式】模板模式

    概念 模板模式定义了一个算法的步骤,并允许子类为一个或多个步骤提供其实践方式.让子类在不改变算法架构的情况下,重新定义算法中的某些步骤. 抽象摸板角色:(抽象父类) 定义了一个或多个抽象操作,以便让子 ...

  8. C++设计模式详解之模板模式解析

    C++ 模板方法模式解析 模板方法模式定义 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现 模板方法模式实例 以考试为例,考数学和考语文的过程几乎都是一样的,就是准备考试,背书,写试 ...

  9. 九、委派模式与模板模式详解

    14.委派模式 14.1.课程目标 1 .掌握委派模式, 精简程序逻辑, 提升代码的可读性. 2.学会用模板方法模式梳理使用工作中流程标准化的业务场景. 14.2.内容定位 1 .希望通过对委派模式的 ...

最新文章

  1. poj 2777 Count Color
  2. go语言中的闭包结构
  3. android WPS如何绘制垂直和水平的直线
  4. 【leetcode】Integer to Roman
  5. Nginx记录客户端POST过来的具体信息
  6. python常见面试题目(面试官最爱问的python面试题)
  7. 3516a 自带的ive 算子的运行情况分析
  8. SENT协议(SAE-J2716)
  9. 图解TCPIP---第二章
  10. 官网为啥这么喜欢IE和Flash?
  11. jaxen-1.1-beta-6.jar的用处
  12. python语言书写格式_设置Python代码格式
  13. win10外接显示器频繁休眠
  14. 怎么恢复oracle的包,Oracle的恢复管理器及DBMS_JOB包分析
  15. 鸿蒙太空是什么意思,“我所居兮,青埂之峰;我所游兮,鸿蒙太空。谁与我逝兮,吾谁与从?渺渺茫茫兮,归彼大荒”的意思...
  16. mysql error1205 博客_MySQL的ERROR 1205错误分析
  17. 电话号码的字母组合(C++实现)
  18. C#实现网络监控,网络连接是否断开
  19. ActiViz学习点滴(五)——坐标变换
  20. Java课设对对碰_第11章对对碰游戏(图形版)(Java游戏编程原理与实践教程课件).ppt...

热门文章

  1. 设计模式六大原则:里氏替换原则(五)
  2. 笔记本设置合上不睡眠
  3. 超详细VMware安装Ubuntu虚拟机步骤
  4. 常用的git提交代码命令
  5. 像素专业版Graph可视化操作入门
  6. 海水淡化膜:膜技术的广泛应用介绍
  7. 基于java SSM框架的个人网上日记、博客系统
  8. android手机卡怎么办,安卓手机卡慢怎么办 安卓手机卡慢解决方案【详解】
  9. 服务搭建篇(九) 使用GitLab+Jenkins搭建CI\CD执行环境 (上) 基础环境搭建
  10. FPGA学习 Vivado使用篇之ILA(逻辑分析仪)