1.20(设计模式)模板模式

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

 

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

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

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

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

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

 

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

 

 

例如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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

少年,看你异于常人,有空花2小时来参加有3000人的源码共读嘛~

大家好&#xff0c;我是若川。按照从易到难的顺序&#xff0c;前面几期&#xff08;比如&#xff1a;validate-npm-package-name、axios工具函数&#xff09;很多都只需要花2-3小时就能看完&#xff0c;并写好笔记。但收获确实很大。开阔视野、查漏补缺、升职加薪。已经有400笔…

HDU 3488 KM

http://acm.hdu.edu.cn/showproblem.php?pid3488 依然KM&#xff0c; 可以最小费用流 与HDU1853 差不多&#xff0c;但是1853要判断是否满足回路的的条件&#xff0c;KM还不会判回路&#xff0c;所以做1853时学了最小费用流做的&#xff0c;说是学最小费用流 只是皮毛了。。…

Java 面向对象的程序设计(二)

编写一个java程序&#xff0c;设计一个汽车类Vehicle&#xff0c;包含的属性有车轮的个数wheels和车重weight。小汽车类Car是Vehicle的子类&#xff0c;包含的属性有载人数loader。卡车类Truck是Car类的子类&#xff0c;其中包含的属性有载重量payload。每个类都有构造方法和输…

16位调色板和32位调色板_使调色板可访问

16位调色板和32位调色板Accessibility has always been a tough sell. Admittedly, less so than in the ‘nineties, when no prospective client was interested. But even today — more enlightened times — the majority of companies I encounter still prefer to make …

从零开始发布自己的NPM包

大家好&#xff0c;我是若川。持续组织了6个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan02 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列在Ver…

flash不能访问本地文件

flash出现"不能访问本地资源";解决方案 linux下&#xff0c;如果没有文件夹自行创建 在/home/{user}/.macromedia/Flash_Player/#Security/FlashPlayerTrust下面&#xff0c;随便建个文本文件&#xff0c;比如1.txt 然后写入路径&#xff0c;最省事的办法直接来个/ 凶…

Jest + React Testing Library 单测总结

大家好&#xff0c;我是若川。持续组织了6个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan02 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列1、背…

不怕神一样的对手就怕猪一样的队友

“不怕神一样的对手就怕猪一样的队友”这句话现在广为流传&#xff0c;实际上说的就是团队重要性&#xff0c;一个好的团队是可以克服很多你想象不大的困难&#xff0c; 做出你觉得不可能成绩。 但是很多时候我们面临的不是神一样的对手&#xff0c;而是猪一样的队友&#xff0…

着迷英语900句_字体令人着迷

着迷英语900句I’m crazy about fonts. My favorite part of any text editing software is the drop down menu for picking fonts. When I look at any text, I try to identify the font. Roboto is my favorite font.我为字体疯狂。 在任何文本编辑软件中&#xff0c;我最喜…

hdu 2188悼念512汶川大地震遇难同胞——选拔志愿者(博弈)

简单博弈就那样&#xff0c;懂SG函数就成&#xff0c;最近做的博弈都千篇一律。。。 #include<cstdio> #include<cstring> #define N 11110 int sg[N],s[N],m,n; bool h[N]; void ssgg() {int i,j;sg[0]0;for(i1;i<N;i){ memset(h,0,sizeof(h));for(j1;j<n;j…

推荐一个大佬,文章适合偷偷读!

大家好&#xff0c;我是若川。周末愉快。也许你看到这篇文章是周一的上午~我不得不推荐一位大佬给你&#xff01;这位大佬的文章很硬&#xff0c;却一直在「抱怨没有粉丝&#xff0c;没人愿意分享」我去读了读&#xff0c;尼玛这个「谁TM敢分享啊」&#xff0c;文章太「违规」了…

PERFORMANCE-MONITORING(转)

Performance-Monitoring 是Intel提供的可以监测统计CPU内部所产生事件的一组方法。在Intel的手册上介绍了两类CPU事件监测方法&#xff1a;architectural performance monitoring 和 non-architectural performance monitoring。Architectural performance monitoring与平台&am…

ux设计_为企业UX设计更好的数据表

ux设计重点 (Top highlight)If you have worked on enterprise products, you must have noticed the use of lots of data tables. Therefore, I am writing this article to collect the most common use cases and discuss how elegantly we can handle them.如果您使用过企…

hdu1728--------坑爹啊

尼玛&#xff0c;就因为没发现‘yes’写成‘yrs’。整整让哥找了一个小时的bug。有没有..........此刻&#xff0c;内流满面&#xff01; 分析&#xff1a; 开始以为是单纯的BFS,结果WA无数次&#xff01;&#xff01; 后来分析后发现是要找到不超过转向次数的转向路径, 最重要…

狼叔直播 Reaction《学习指北:Node.js 2022 全解析》

大家好&#xff0c;我是若川。持续组织了6个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan02 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列本文是…

figma下载_Figma中的高级图像处理

figma下载Figma is not exactly suited for image manipulation, and that’s completely fine. While it does provide an ample amount of tools that let you apply some basic changes to your raster images, for anything more complex you need to look someplace else.…

ToString格式化

在很多对象显示为字符串的时候都会使用到ToString中的格式化&#xff0c;由于以前没怎么注意到这个问题&#xff0c;想总结一下各个基础结构对象的格式化&#xff0c;以便后备之用&#xff01;&#xff01;&#xff01;Int.ToString(format): 格式字符串采用以下形式&#xff1…

xml学习4-dtd

1、DTD元素的定义 <?xml version"1.0" encoding"gb2312"?> <!--*表示0或者多个 表示至少要有一个 ?表示0个或者一个 内容模型 |表示只能包含分隔开中的一个 ,表示序列 下面是DTD元素的声明 #PCDATA 表示字符数据 EMPTY表示 空元素…

指针和指针的指针_网络上的iPad指针

指针和指针的指针a week ago I saw a new IPad Pointer presentation and was very excited about what they did. It was very interesting to see how they design different pointer modes and attention to details. Here is the presentation:一周前&#xff0c;我看到了一…

Vue 是如何用 Rollup 打包的?

大家好&#xff0c;我是若川。持续组织了6个月源码共读活动&#xff0c;感兴趣的可以点此加我微信 ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列Rollu…