中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Java設計模式的模板方法模式

發布時間:2021-11-08 09:02:36 來源:億速云 閱讀:148 作者:iii 欄目:開發技術

這篇文章主要講解了“怎么理解Java設計模式的模板方法模式”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么理解Java設計模式的模板方法模式”吧!

一、什么是模板方法模式

模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟的實現延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中某些步驟的具體實現。

看到“設計模式”這四個字我們往往會覺得高深莫測,但是模板方法模式卻是一個例外,你要關注的就是一個方法而已。

模板方法模式確實非常簡單,僅僅使用繼承機制,但是它是一個應用非常廣泛的模式。

怎么理解Java設計模式的模板方法模式

二、模板方法模式的使用場景

當系統中算法的骨架是固定的時候,而算法的實現可能有很多種的時候,就需要使用模板方法模式。

  • 多個子類有共有的方法,并且邏輯基本相同

  • 重要、復雜的算法,可以把核心算法設計為模板方法,周邊的相關細節功能則由各個子類實現

  • 重構時,模板方法是一個經常使用的方法,把相同的代碼抽取到父類中,然后通過構造函數約束其行為。

舉例:需要做一個報表打印程序,用戶規定需要表頭,正文,表尾。但是客戶的需求會變化,一會希望這樣顯示表頭,一會希望那樣顯示。

這時候采用模板方式就合適。

三、模板方法模式的優缺點

優點:

封裝不變部分,擴展可變部分。把認為不變部分的算法封裝到父類中實現,而可變部分的則可以通過繼承來繼續擴展。提取公共部分代碼,便于維護。行為由父類控制,子類實現

缺點:

算法骨架需要改變時需要修改抽象類。

按照設計習慣,抽象類負責聲明最抽象、最一般的事物屬性和方法,實現類負責完成具體的事務屬性和方法,但是模板方式正好相反,子類執行的結果影響了父類的結果,會增加代碼閱讀的難度。

四、模板方法模式的實現

AbstractClass類---抽象模板類,定義并實現了一個模板方法。

這個模板一般是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象操作中,推遲到子類實現。
頂級邏輯也有可以調用具體的方法

abstract class AbstractClass
{
    //一些抽象行為放到子類去實現
    public abstract void PrivateOperation1();
    public abstract void PrivateOperation2();
     //模板方法,給出了邏輯的骨架,而邏輯的組成是一些相應的抽象操作,它們都推遲到子類實現
    public void TemplateMethod()
    {
        PrivateOperation1();
        PrivateOperation2();
        Console.WriteLine("");
    }
}

ConcreteClass類,實現父類所定義的一個或者多個抽象方法。

每一個AbstractClass都可以有任意多個ConcreteClass與之對應,而每一個ConcreteClass都可以給出這些抽象方法的不同實現,從而使得頂級邏輯的實現各不相同。

class ConcreteClassA : AbstractClass
{
    public override void PrivateOperation1()
    {
        Console.WriteLine("具體類A方法1實現");
    }
     public override void PrivateOperation2()
    {
        Console.WriteLine("具體類A方法2實現");
    }
}
class ConcreteClassB : AbstractClass
{
    public override void PrivateOperation1()
    {
        Console.WriteLine("具體類B方法1實現");
    }
     public override void PrivateOperation2()
    {
        Console.WriteLine("具體類B方法2實現");
    }
}

客戶端代碼

static void Main(string[] args)
{
    AbstractClass c;
    c = new ConcreteClassA();
    c.TemplateMethod();
     c = new ConcreteClassB();
    c.TemplateMethod();
     Console.Read();
}

感謝各位的閱讀,以上就是“怎么理解Java設計模式的模板方法模式”的內容了,經過本文的學習后,相信大家對怎么理解Java設計模式的模板方法模式這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

堆龙德庆县| 大竹县| 固镇县| 崇文区| 景洪市| 丹凤县| 同德县| 苍南县| 三门县| 通河县| 临沭县| 石城县| 东海县| 视频| 日喀则市| 北碚区| 泊头市| 榆中县| 光山县| 历史| 昭觉县| 辽阳市| 芒康县| 寿宁县| 旬邑县| 太原市| 康定县| 延安市| 曲周县| 肥城市| 自治县| 图木舒克市| 龙海市| 浏阳市| 四会市| 宜良县| 周至县| 景洪市| 五指山市| 弥渡县| 抚州市|