1.20(设计模式)模板模式
模板模式,定義了一個(gè)模板,模板內(nèi)容通過子類實(shí)現(xiàn)模板的抽象方法去添加。
?
就類似學(xué)校需要建一個(gè)新校區(qū),新校區(qū)有多棟宿舍,找了多個(gè)施工方,每個(gè)施工方負(fù)責(zé)一棟宿舍樓。
各個(gè)施工方都有自己的想法,建造的宿舍樓各不相同,當(dāng)然從使用上來說是可以的(畢竟可以用就行),只是后期裝修維護(hù)不方便。
現(xiàn)在為了后期便于管理維護(hù),學(xué)習(xí)先找設(shè)計(jì)院設(shè)計(jì)圖紙,所有的施工方都按照圖紙上面的來建造,圖紙大體的框架是相同的,
但樓棟的某些具體細(xì)節(jié)各不相同,各個(gè)施工方根據(jù)自身情況調(diào)節(jié)。
可以看做是施工方根據(jù)圖紙模板建造,但某些具體細(xì)節(jié)仍然由施工方來確定。
?
這樣在定義和實(shí)現(xiàn)之間添加一個(gè)模板,使實(shí)現(xiàn)不那么隨心所欲,而是在固定框架中去完善。
?
?
例如html文檔,文檔頭部和尾部的格式基本是固定的,只是body部分的內(nèi)容不同。
我們就可以構(gòu)建一個(gè)包含html文檔頭部和尾部的模板,body部分根據(jù)具體需求填充內(nèi)容即可。
?
首先我們是要繪制html頁面,所以先定義一個(gè)接口,里面有一個(gè)構(gòu)建頁面的方法。
public interface PageUtil {public String buildPage(); }?
?
html模板類,這就是在定義和實(shí)現(xiàn)之間的模板,加了這一層后使實(shí)現(xiàn)更規(guī)范,這就相當(dāng)于施工圖紙。
子類始終是按照該類的HTML模板去構(gòu)建頁面,只是body部分的內(nèi)容不同,
body部分通過實(shí)現(xiàn)了?abstract void appendBody方法的子類重寫該方法確定body部分內(nèi)容。
public abstract class AbstractPageUtil implements PageUtil{private StringBuffer stringBuffer = new StringBuffer();@Override//固定格式的模板,子類始終是按照這個(gè)模板來構(gòu)建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);//子類實(shí)現(xiàn)該方法,填充具體內(nèi)容stringBuffer.append("</body>\r\n</html>");//html尾部return stringBuffer.toString();}//子類填充body,abstract void appendBody(StringBuffer stringBuffer) ; }子類繼承模板類,實(shí)現(xiàn)appendBody方法即可,模板類的子類都是按照這個(gè)模式生成html文檔。
只是body的內(nèi)容根據(jù)實(shí)際需求有所不同,
?
?
接下來就是繼承AbstractPageUtil 的子類,實(shí)現(xiàn)父類的appendBody方法,填充不同的內(nèi)容。
public class HtmlPageUtil extends AbstractPageUtil{@Overridevoid appendBody(StringBuffer stringBuffer) {//實(shí)現(xiàn)父類的方法,設(shè)置body部分內(nèi)容,模板依然是父類的模板stringBuffer.append("hello world!");}public static void main(String[] args) {//測試HtmlPageUtil htmlPageUtil = new HtmlPageUtil();System.out.println(htmlPageUtil.buildPage());}} 運(yùn)行結(jié)果:<!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
轉(zhuǎn)載于:https://www.cnblogs.com/huang-changfan/p/11064098.html
總結(jié)
以上是生活随笔為你收集整理的1.20(设计模式)模板模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react学习(44)----只更新它需
- 下一篇: 设计模式练习_设计练习是邪恶的