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中模板方法模式實現的全部,希望您喜歡它。
翻譯自: https://www.javacodegeeks.com/2013/08/template-method-design-pattern-in-java-2.html
java 模板方法設計模式
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java 模板方法设计模式_Java中的模板方法设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 又又又双叒叕什么意思 又又又双叒叕解释
- 下一篇: java泛型方法 通配符_Java泛型教