模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。
例如: 在現實生活中,完成某件事情是需要 n 個固定步驟的。如"在**進行購物"這件事情的完成一般需要三個步驟:登入**、挑選商品、 付款。但對於登入**與付款這兩步,每個人幾乎都是相同的操作。但不同的地方是,每個人所挑選的商品是不同的。 在軟體開發過程中同樣存在這樣的情況。某類的某個方法的實現,需要幾個固定步驟。在這些固定步驟中,對於該類的不同物件, 有些步驟的實現是固定不變的,有些步驟的實現是大相徑庭的,有些步驟的實現是可變可不變的。對於這種情況,就適合使用模板方法設計模式程式設計。基本結構:
在模板方法設計模式中,存在乙個父類(一般是抽象的)。其中包含 兩類方法: 模板方法 和 3 種步驟方法;
結構:
實現在**上購物的案例。基本邏輯圖:
**:首先看shopping
類:
public abstract class shopping
// 固定方法(最終方法)
public final void uselogin
() //抽象方法
public abstract void buy();
// 鉤子方法
public void pay
()}複製**
然後是兩個子類:
public class shoesshopping extends shopping
}public class clothesshopping extends shopping
// 重寫了鉤子方法
@override
public void pay
() }複製**
測試:
public class mytest
}複製**
輸出:
使用者登入
購買nike鞋子!!!!
使用銀聯支付
-----------------------
使用者登入
購買海瀾之家**!!!!!
使用支付寶支付複製**
**於:
C (深入解析模板函式)
3小節課 1.q 證明編譯器對函式模板會有兩次編譯。a 一次是對函式模板自動尋找型別,並產生函式。第二次編譯是對函式進行編譯 include include using namespace std class test template typename t void swap t a,t b ty...
lodash常用方法結合實際專案解析
官方定義 該方法類似 assign,除了它遞迴合併sources 物件自身和繼承的可列舉屬性到object目標物件。如果目標值存在,被解析為undefined的sources 物件屬性將被跳過。陣列和普通物件會遞迴合併,其他物件和值會被直接分配覆蓋。源物件從從左到右分配。後續的 物件屬性會覆蓋之前分...
深入淺出模板方法模式
一 引子這是乙個很簡單的模式,卻被非常廣泛的使用。之所以簡單是因為在這個模式中僅僅使用到了繼承關係。繼承關係由於自身的缺陷,被專家們扣上了 罪惡 的帽子。使用委派關係代替繼承關係 盡量使用介面實現而不是抽象類繼承 等等專家警告,讓我們這些菜鳥對繼承 另眼相看 其實,繼承還是有很多自身的優點所在。只是...