日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

设计模式之模板方法

發布時間:2023/12/4 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之模板方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模板方法介紹

模板方法模式是一種行為設計模式,它在超類中定義一個算法的框架,允許子類在不修改結構的情況下重寫算法的特定步驟。

模板

模板方法模式建議將算法分解為一系列步驟,然后將這些步驟改為方法,最后在“模板方法”中依次調用這些方法。

步驟可以是抽象的,也可以有一些默認的實現。為了能夠使用算法,客戶端需要自行提供子類并實現所有的抽象步驟(有時候還需要重寫步驟)。

模板方法將算法分解為步驟,并允許子類重寫這些步驟,而非重寫實際的模板方法。

分解步驟

1、抽取步驟必須由各個子類來實現;

2、可選步驟已有一些默認實現,但仍可在需要時進行重寫。

模板方法的結構

  • 1、抽象類

聲明作為算法步驟的方法,以及依次調用它們的實際模板方法。

算法步驟可以被聲明為抽象類,默認提供一些實現。

  • 2、具體類

實現抽象方法的類,重寫所有步驟,但不能重寫模板方法自身。

適合場景

  • 1、當希望客戶端擴展某個特定算法步驟,而不是整個算法或其結構時。

  • 2、當多個類的算法除了一些細微不同之處幾乎完全一樣時。

實現方式

1、分析目標算法,確定能否將其分解為多個步驟(從所有子類的角度出發,考慮哪些步驟能夠通用,那些步驟各不相同)。

2、創建抽象基類并聲明一個模板方法和代表算法步驟的一系列抽象方法(在模板方法中根據算法結構依次調用相應步驟)。

對于默認的實現,可以給部分步驟帶來好處。同時可以考慮在算法的關鍵之間添加鉤子。

3、為每個算法變體新建一個具體子類,它必須實現所有的抽象步驟,也可以重寫部分可選步驟。

優點

1、你可僅允許客戶端重寫一個大型算法中的特定部分,使得算法其他部分修改對其所造成的影響減小。

2、可將重復的代碼提取到一個超類中。

缺點

1、部分客戶端會受到算法框架的限制。

2、會導致違法里氏替換原則,通過子類抑制默認步驟。

3、模板方法中步驟越多,后期的維護成本會增大。

Demo

它在基類中定義了一個算法的框架,允許子類在不修改結構的情況下重寫算法的特定步驟。

通常使用此模板方法來向框架用戶提供通過繼承實現的、對標準功能進行擴展的簡單方式

提供的抽象類

抽象類

實現抽象類的具體類

實現抽象類

客戶端和Main方法業務邏輯

客戶端和Main方法

首先我們可以看到在提供的抽象方法中,有一個模板方法,此方法用于執行基類聲明的算法步驟。后面客戶端只需要調用此方法就可以完成交給不同子類的業務。

不同的子類,由于繼承相同的抽象類,首先必須實現抽象方法,其次可根據每個子類的業務需求各自來實現某些鉤子方法,此方法用于在子類中超長發揮,各自都可以對進行變更,彼此不受影響。最后想要實現的是,我調用同樣的方法代碼,后面聲明實現的兩個類會得到不同的顯示結果。

顯示的不同結果

由于1號沒有重寫鉤子方法,2號重寫了。所以當在模板方法中調用One()時,1號沒有進行任何操作,執行的是抽象類中的空方法,而2號重寫了,則輸出了重寫的方法。

小寄語

人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。

原創不易,給個關注。

我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點贊、轉發 ?謝謝。

- END -

往期推薦

設計模式總覽

設計模式之簡單工廠

設計模式之抽象工廠

設計模式之建造者

設計模式之原型

設計模式之單例

設計模式之適配器

設計模式之橋接

設計模式之組合

設計模式之裝飾器

設計模式之外觀

設計模式之享元

設計模式之代理

設計模式之責任鏈

設計模式之命令

設計模式之迭代器

設計模式之中介者

設計模式之備忘錄

設計模式之觀察者

設計模式之狀態

設計模式之策略

總結

以上是生活随笔為你收集整理的设计模式之模板方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。