Java中的模板方法模式
模板方法模式是一種行為模式,建議在超類中更一般地定義算法。 該算法是在稱為模板方法的方法中定義的。 子類僅定義更具體的算法步驟的實(shí)現(xiàn)。
使用這種設(shè)計(jì)模式的好處是,算法后面的任何更改只會影響超類中的代碼。 此外,它還可以提高代碼的可重用性。
在本快速教程中,我們將學(xué)習(xí)在Java中實(shí)現(xiàn)模板方法模式。
模板方法模式:
假設(shè)我們必須寫一篇文章。 通常涉及幾個步驟:
- 專題研究
- 勾勒輪廓
- 寫介紹
- 然后,準(zhǔn)備論文的正文
- 最后,總結(jié)一下
因此,讓我們繼續(xù)創(chuàng)建EssayTemplate類:
public abstract class EssayTemplate {private String topic;public EssayTemplate(String topic) {this.topic = topic;}public final void writeEssay() {doResearch();makeOutline();writeIntro();writeBody();writeConclusion(); } void doResearch() { System.out.println("Researching"); }void makeOutline() { System.out.println("Making an outline"); }void writeIntro() { System.out.println("Introducing topic"); }void writeConclusion() { System.out.println("Concluding topic");}abstract writeBody(); }無論論文的類型是短還是長,大部分的常規(guī)步驟(包括研究,創(chuàng)建大綱,撰寫引言和結(jié)論)都將保持不變。 因此,這些方法定義存在于超類本身中。
另外,請注意, 我們已將模板方法標(biāo)記為最終方法,以避免被任何子類覆蓋。
使用模板類:
論文的主要內(nèi)容或正文取決于論文的性質(zhì)。 因此,我們將writeBody()方法定義留給子類提供。
現(xiàn)在,讓我們創(chuàng)建EssayTemplate的兩個子類-ShortEssay和LongEssay :
public class ShortEssay extends EssayTemplate {public ShortEssay(String topic) {super(topic);}@Overridepublic void writeBody() {System.out.println("Adding 2 paras");} }public class LongEssay extends EssayTemplate {public LongEssay(String topic) {super(topic);}@Overridepublic void writeBody() {System.out.println("Adding 6 paras");} }UML圖:
我們可以通過UML圖將模板模式的上述示例實(shí)現(xiàn)表示為:
ShortEssay和LongEssay定義了writeBody()方法的實(shí)現(xiàn)。 但是,定義算法的方法以及其他常見方法的實(shí)現(xiàn)位于超類中。
使用模板模式的客戶端代碼:
讓我們編寫一些客戶端代碼來測試我們的實(shí)現(xiàn):
//code in main method EssayTemplate shortEssay = new ShortEssay("Programming - An Art"); shortEssay.writeEssay();這樣,我們將在控制臺上獲得以下輸出:
Researching Making an outline Introducing topic Adding 2 paras Concluding topic結(jié)論:
在本教程中,我們研究了模板方法模式。
java.io.InputStream和java.io.OutputStream的所有非抽象方法都使用模板模式 。
翻譯自: https://www.javacodegeeks.com/2019/09/template-method-pattern-java.html
總結(jié)
以上是生活随笔為你收集整理的Java中的模板方法模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 尼康全画幅复古微单相机 Z f 发布:传
- 下一篇: java美元兑换,(Java实现) 美元