結合案例深刻解析模板方法設計模式

1、基本概念

模板方法模式是類的行爲模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,而後聲明一些抽象方法來迫使子類實現剩餘的邏輯。不一樣的子類能夠以不一樣的方式實現這些抽象方法,從而對剩餘的邏輯有不一樣的實現。這就是模板方法模式的用意。算法

例如: 在現實生活中,完成某件事情是須要 n 個固定步驟的。如"在淘寶進行購物"這件事情的完成通常須要三個步驟: 登陸網站、挑選商品、 付款。但對於登陸網站與付款這兩步,每一個人幾乎都是相同的操做。但不一樣的地方是,每一個人所挑選的商品是不一樣的。 在軟件開發過程當中一樣存在這樣的狀況。某類的某個方法的實現,須要幾個固定步驟。在這些固定步驟中,對於該類的不一樣對象, 有些步驟的實現是固定不變的,有些步驟的實現是截然不同的,有些步驟的實現是可變可不變的。對於這種狀況,就適合使用模板方法設計模式編程。

2、結構

基本結構:編程

在模板方法設計模式中,存在一個父類(通常是抽象的)。其中包含 兩類方法: 模板方法 和 3 種步驟方法;設計模式

  • 模板方法: 即實現某種算法的方法步驟。這些步驟都是調用的步驟方法實現的。
  • 步驟方法:即完成模板方法的每一個階段性方法。
    • 抽象方法: 子類必須實現的方法。即子類的個性化定義;
    • 最終方法(固定方法): 子類不能重寫的方法,即全部子類都要作的步驟;
    • 鉤子方法: 父類給了默認實現,子類能夠重寫,也能夠不重寫的方法;

 

結構:併發

 

 

3、案例

實如今網站上購物的案例。

基本邏輯圖:分佈式

 

 

代碼:ide

首先看Shopping類:函數

public abstract class Shopping {

    // 模板方法
    public void buyGoods(){
        useLogin(); //固定的方法,子類不能重寫
        buy();      //抽象方法,子類必須實現
        pay();      //鉤子方法(hook),子類能夠重寫
    }

    // 固定方法(最終方法)
    public final void useLogin() {
        System.out.println("用戶登陸");
    }

    //抽象方法
    public abstract void buy();

    // 鉤子方法
    public void pay(){
        System.out.println("使用銀聯支付");
    }
}

 

而後是兩個子類:高併發

public class ShoesShopping extends Shopping {
    @Override
    public void buy() {
        System.out.println("購買Nike鞋子!!!!");
    }
}
public class ClothesShopping extends Shopping {
    @Override
    public void buy() {
        System.out.println("購買海瀾之家男裝!!!!!");
    }

    // 重寫了鉤子方法
    @Override
    public void pay() {
        System.out.println("使用支付寶支付");
    }
}

 

測試:測試

public class MyTest {

    public static void main(String[] args){
        Shopping shoesShopping = new ShoesShopping();
        shoesShopping.buyGoods();

        System.out.println("-----------------------");
        Shopping clothesShopping = new ClothesShopping();
        clothesShopping.buyGoods();
    }
}

 

輸出:網站

用戶登陸
購買Nike鞋子!!!!
使用銀聯支付

 

-----------------------
用戶登陸
購買海瀾之家男裝!!!!!
使用支付寶支付

4、總結

有時候爲了防止惡意操做,模板方法也會加上 final 關鍵詞。

免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。
傳送門:
相關文章
相關標籤/搜索