模板模式,定义了一个模板,模板内容通过子类实现模板的抽象方法去添加。

就类似学校需要建一个新校区,新校区有多栋宿舍,找了多个施工方,每个施工方负责一栋宿舍楼。

各个施工方都有自己的想法,建造的宿舍楼各不相同,当然从使用上来说是可以的(毕竟可以用就行),只是后期装修维护不方便。

现在为了后期便于管理维护,学习先找设计院设计图纸,所有的施工方都按照图纸上面的来建造,图纸大体的框架是相同的,

但楼栋的某些具体细节各不相同,各个施工方根据自身情况调节。

可以看做是施工方根据图纸模板建造,但某些具体细节仍然由施工方来确定。

这样在定义和实现之间添加一个模板,使实现不那么随心所欲,而是在固定框架中去完善。

例如html文档,文档头部和尾部的格式基本是固定的,只是body部分的内容不同。

我们就可以构建一个包含html文档头部和尾部的模板,body部分根据具体需求填充内容即可。

首先我们是要绘制html页面,所以先定义一个接口,里面有一个构建页面的方法。

public interface PageUtil {public String buildPage();
}

html模板类,这就是在定义和实现之间的模板,加了这一层后使实现更规范,这就相当于施工图纸。

子类始终是按照该类的HTML模板去构建页面,只是body部分的内容不同,

body部分通过实现了 abstract void appendBody方法的子类重写该方法确定body部分内容。

public abstract class AbstractPageUtil implements PageUtil{private StringBuffer stringBuffer = new StringBuffer();@Override//固定格式的模板,子类始终是按照这个模板来构建HTML页面的public String buildPage() {stringBuffer.append("<!Doctype html>\r\n<html>\r\n" +"<head>\r\n" + "<meta charset=\"UTF-8\">\r\n" + "<title>Insert title here</title>\r\n" + "</head>\r\n" + "<body>");//html头部appendBody(stringBuffer);//子类实现该方法,填充具体内容stringBuffer.append("</body>\r\n</html>");//html尾部return stringBuffer.toString();}//子类填充body,abstract void appendBody(StringBuffer stringBuffer) ;
}

子类继承模板类,实现appendBody方法即可,模板类的子类都是按照这个模式生成html文档。

只是body的内容根据实际需求有所不同,

接下来就是继承AbstractPageUtil 的子类,实现父类的appendBody方法,填充不同的内容。

public class HtmlPageUtil extends AbstractPageUtil{@Overridevoid appendBody(StringBuffer stringBuffer) {//实现父类的方法,设置body部分内容,模板依然是父类的模板stringBuffer.append("hello world!");}public static void main(String[] args) {//测试HtmlPageUtil htmlPageUtil = new HtmlPageUtil();System.out.println(htmlPageUtil.buildPage());}}

运行结果:<!Doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>hello world!</body>
</html>

参考资料:

https://www.cnblogs.com/zuoxiaolong/p/pattern10.html

https://www.runoob.com/design-pattern/template-pattern.html

转载于:https://www.cnblogs.com/huang-changfan/p/11064098.html

1.20(设计模式)模板模式相关推荐

  1. 12. 星际争霸之php设计模式--模板模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  2. Java设计模式-模板模式

    Java设计模式-模板模式 什么是模板模式? 模板模式,顾名思义,就是通过模板拓印的方式. 定义模板,就是定义框架.结构.原型.定义一个我们共同遵守的约定. 定义模板,我们的剩余工作就是对其进行充实. ...

  3. Java设计模式—模板模式(Template)

    模板模式 业务需求 编写豆浆制作程序 选材-添加配料-浸泡-豆浆机打碎 选材.浸泡.打碎这几步对于制作不同豆浆都是一样的 比较简单,这里不再使用传统方法,直接上设计模式 模板模式基本介绍 模板模式,在 ...

  4. 【设计模式】Java设计模式 - 模板模式

    [设计模式]Java设计模式 - 模板模式

  5. C语言实现设计模式—模板模式

    文章目录 C语言实现设计模式-模板模式 模板模式介绍 UML用例说明 实际场景使用 框架结构[共用框架]-通用的串口协议分析函数 不同实现-数据类型区别 C语言实现设计模式-模板模式 模板模式介绍 在 ...

  6. 16、Python与设计模式--模板模式

    一.股票查询客户端 投资股票是种常见的理财方式,我国股民越来越多,实时查询股票的需求也越来越大.今天,我们通过一个简单的股票查询客户端来认识一种简单的设计模式:模板模式. 根据股票代码来查询股价分为如 ...

  7. PHP设计模式——模板模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 模板模式准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的 ...

  8. 设计模式 模板模式和策略模式

    模板模式和策略模式,有相识的地方,都是通过对钩子方法的调用,来实现一个业务的完整逻辑. 所以这里我将两种模式放在一起介绍,比较容易加深对这两种模式的理解. 模板模式 在模板模式(Template Pa ...

  9. java设计模式————模板模式,手撸一个JDBCTemplate

    模板模式(Template Method Pattern) 定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现. 模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤. 属于行为 ...

  10. 一文搞懂设计模式--模板模式

    Hi,大家好.今年的天气实在是太热了,七月份的厦门晒得我觉得身上冒出了烤肉香,不知道各位是否安好,但是在再热的天气也不能阻止我们学习的热情(doge).今天的主题是模板(Template Method ...

最新文章

  1. JS题目总结:原型链/new/json/MVC/Promise
  2. python 获取mysql中所有数据库名称
  3. Docker初识之Centos6.2下安装Docker容器
  4. IIS -2147467259 (0x80004005)
  5. solr文档索引最佳实践
  6. 关于tag,viewWithTag
  7. 面试官 | 这位连单点登录都不知道,让他回家等通知去吧
  8. 晨哥真有料丨Ta是暧昧成瘾,你却动了真心!
  9. Web后端学习笔记Flask(2)模板
  10. SqlServer规则
  11. Java基础练习之流程控制(四)
  12. c语言位运算知乎,07-C语言运算符-指趣学院
  13. 韦东山freeRTOS系列教程之【第八章】事件组(event group)
  14. java-jsoup爬虫
  15. 【YOLOV5-5.x 源码讲解】整体项目文件导航
  16. win10打开蓝牙_联想笔记本win10无法连接蓝牙音箱的解决方法
  17. 关于基站定位及wifi定位
  18. 如何提升自己写代码的能力
  19. 用malloc动态申请一个二维数组的三种方法
  20. 华为手机助手 无法访问服务器,EMUI4.X手机及windowsXP系统无法正常使用华为手机助手问题...

热门文章

  1. xdocument查找节点值_二叉查找树(java)
  2. 第5章 Python 数字图像处理(DIP) - 图像复原与重建12 - 空间滤波 - 使用频率域滤波降低周期噪声 - 陷波滤波、最优陷波滤波
  3. 微信转账一次显示两个_微信为啥分红包和转账两大功能?这4个区别你要知道,望相互转告...
  4. linux磁盘使用情况脚本,技术|用 Linux Shell 脚本来监控磁盘使用情况并发送邮件...
  5. PHP程序性能优化的50种方法
  6. Vboxmanage改动uuid报错的解决的方法
  7. castle windsor学习----- Services and Components 两者的定义
  8. sql 中实现打乱数据的排序
  9. 动画演示 Delphi 2007 IDE 功能[3] - 修改属性
  10. Mac下的Parallel Windows忘记密码怎么办?