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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 模板方法设计模式_Java中的模板方法设计模式

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

java 模板方法設計模式

模板方法是一種行為設計模式 ,用于創建方法存根并將某些實現步驟推遲到子類。 模板方法定義了執行算法的步驟,它可以提供默認實現,該實現對于所有或某些子類可能是通用的。

讓我們通過一個例子來理解這種模式,假設我們想提供一種建造房屋的算法。 建造房屋需要執行的步驟是-建造地基,建造Struts,建造墻壁和窗戶。 重要的一點是,我們無法更改執行順序,因為我們無法在構建基礎之前構建窗口。 因此,在這種情況下,我們可以創建一個模板方法,該方法將使用不同的方法來建造房屋。

現在,建造房屋的基礎對于所有類型的房屋都是相同的,無論是木制房屋還是玻璃房屋。 因此,我們可以為此提供基本的實現,如果子類要重寫此方法,則它們可以但對于大多數類型的房屋來說通常是通用的。

為了確保子類不會覆蓋template方法,我們應該將其定型。

模板方法抽象類

由于我們希望某些方法可以由子類實現,因此我們必須將基類設置為抽象類 。

HouseTemplate.java

package com.journaldev.design.template;public abstract class HouseTemplate {//template method, final so subclasses can't overridepublic final void buildHouse(){buildFoundation();buildPillars();buildWalls();buildWindows();System.out.println("House is built.");}//default implementationprivate void buildWindows() {System.out.println("Building Glass Windows");}//methods to be implemented by subclassespublic abstract void buildWalls();public abstract void buildPillars();private void buildFoundation() {System.out.println("Building foundation with cement,iron rods and sand");} }

buildHouse()是模板方法,它定義執行多個步驟的執行順序。

模板方法具體類

我們可以有不同類型的房屋,例如木制房屋和玻璃房屋。

WoodenHouse.java

package com.journaldev.design.template;public class WoodenHouse extends HouseTemplate {@Overridepublic void buildWalls() {System.out.println("Building Wooden Walls");}@Overridepublic void buildPillars() {System.out.println("Building Pillars with Wood coating");}}

我們也可以覆蓋其他方法,但是為了簡單起見,我沒有這樣做。

GlassHouse.java

package com.journaldev.design.template;public class GlassHouse extends HouseTemplate {@Overridepublic void buildWalls() {System.out.println("Building Glass Walls");}@Overridepublic void buildPillars() {System.out.println("Building Pillars with glass coating");}}

模板方法模式客戶端

讓我們用一個測試程序來測試我們的模板方法模式示例。

HousingClient.java

package com.journaldev.design.template;public class HousingClient {public static void main(String[] args) {HouseTemplate houseType = new WoodenHouse();//using template methodhouseType.buildHouse();System.out.println("************");houseType = new GlassHouse();houseType.buildHouse();}}

請注意,客戶端正在調用基類的模板方法,并且根據不同步驟的實現,它正在使用基類中的某些方法和子類中的某些方法。

上面程序的輸出是:

Building foundation with cement,iron rods and sand Building Pillars with Wood coating Building Wooden Walls Building Glass Windows House is built. ************ Building foundation with cement,iron rods and sand Building Pillars with glass coating Building Glass Walls Building Glass Windows House is built.

模板方法類圖

JDK中的模板方法模式

  • java.io.InputStream,java.io.OutputStream,java.io.Reader和java.io.Writer的所有非抽象方法。
  • java.util.AbstractList,java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法。

重要事項

  • 模板方法應包含固定順序的某些步驟,對于某些方法,實現因基類而異。 模板方法應該是最終的。
  • 在大多數情況下,子類從超類調用方法,但是在模板模式中,超類模板方法從子類調用方法,這就是好萊塢原則 -“不要叫我們,我們會叫你”。
  • 具有默認實現的基類中的方法稱為Hooks ,它們打算被子類覆蓋,如果您希望某些方法不被覆蓋,則可以將它們定型,例如,在我們的例子中,可以使buildFoundation() final方法,因為如果我們不希望子類覆蓋它。

以上就是Java中模板方法模式實現的全部,希望您喜歡它。

參考:來自Java的JCG合作伙伴 Pankaj Kumar的Java模板方法設計模式,位于Developer Recipes博客上。

翻譯自: https://www.javacodegeeks.com/2013/08/template-method-design-pattern-in-java-2.html

java 模板方法設計模式

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

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

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