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.pswp.cn/news/274913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274913.shtml
英文地址,請注明出處:http://en.pswp.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…