Java模板方法設計模式

模板方法設計模式

在現實生活中,完成某件事是需要n多個固定步驟的。如"在淘寶網進行購物"這件事情的完成一般需要三個步驟:登錄網站、挑選商品、付款。但對於每個人幾乎都是相同的操作,但不同的地方是,每個人挑選的商品時不同的。

在軟件開發過程中同樣存在這樣的情況,某類的某個方法的實現,需要幾個固定步驟。在這些固定步驟中,對於該類的不同對象,有些步驟地實現是固定不變的,有些步驟的實現是大相徑庭的,有些步驟的實現是可便可不變的,對於這種情況,就是合適用模板方法設計模式編程。

模板方法設計模式的定義是定義了一個操作中某種算法的框架,而將一些步驟延遲到子類中。模板方法設計模式使得子類在不改變一個算法結構的前提下,對某些步驟實現個性化定義。

模板方法程序構成

在末班方法設計模式中,存在一個父類,其中包含兩類方法:模板方法與步驟方法。

模板方法:即完成模板方法的每個階段性方法,是完成模板方法的算法步驟中必須由子類完成的個性化定義。

步驟方法:即完成模板方法的每個階段性方法,每個步驟方法完成某一特定的、完成總算法的一部分功能。步驟方法有三種類型:抽象方法、最終方法與鉤子方法。

抽象方法:即要求子類必須實現的方法,是完成模板方法的算法步驟中必須由自雷完成的個性化定義。

最終方法:是子類不能重寫的方法,是若要完成模板方法的算法步驟,對於所有子類執行都一言過的步驟。

鉤子方法:是父類給出了默認實現,但子類也可以重寫的方法。

 

 

Demo

抽象類:

publicabstractclass Shopping {

    // 模板方法

    publicvoid buyGoods() {

        // 步驟方法

        userLogin();

        buy();

        // 步驟方法

        pay();

 

    }

 

    // 模板方法用戶登錄子類不能重寫的方法

    privatefinalvoid userLogin() {

        System.out.println("用戶登錄");

 

    }

 

    // 步驟方法 -抽象方法子類必須實現的方法

    publicabstractvoid buy();

 

    // 步驟方法- 鉤子方法使用銀聯卡支付

    publicvoid pay() {

        System.out.println("使用銀聯卡支付");

 

    }

}

 

兩個實現類:

publicclass ClothesShopping extends Shopping{

 

    @Override

    publicvoid buy() {

        System.out.println("購買七匹狼男裝");

        

    }

    @Override

    publicvoid pay() {

        System.out.println("使用支付寶付款");

    }

 

}

 

publicclass ShoesShopping extends Shopping {

 

    @Override

    publicvoid buy() {

        System.out.println("購買紅蜻蜓皮鞋");

    }

 

}

 

測試類:

publicclass MyTest {

 

    

    publicstaticvoid main(String[] args) {

        Shopping shoesShopping = new ShoesShopping();

        shoesShopping.buyGoods();

        System.out.println("======================");

        Shopping clothesShopping = new ClothesShopping();

        clothesShopping.buyGoods();

        

        

    }

 

}

運行截圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章