設計模式 模板方法

2021-08-25 05:22:02 字數 1857 閱讀 6279

在**結構上:

1 乙個抽象類:不是介面 因為裡面有個實現方法,多個抽象方法

2 這個抽象類裡有乙個主方法:cook(),

3 主方法裡面包含幾個共性的固定的抽象方法(getrice(),fry(),getout()),並且順序一定的。

4 使用者訪問類danchaofancooker裡面依賴關聯這個抽象類。

這邊引用: 和策略模式的比較

模板方法的意圖:定義乙個演算法流程,將一些特定步驟的具體實現、延遲到子類。使得可以在不改變演算法流程的情況下,通過不同的子類、來實現「定製」流程中的特定的步驟。

策略模式的意圖:使不同的演算法可以被相互替換,而不影響客戶端的使用。

在意圖上看,模板方法更加強調:

1)定義一條線(演算法流程),線上的多個點是可以變化的(具體實現在子類中完成),線上的多個點一定是會被執行的,並且一定是按照特定流程被執行的。

2)演算法流程只有唯一的入口,對於點的訪問是受限的【通常用受保護的虛函式來定義可變點】。

策略模式更注重於: 乙個「策略」是乙個整體的(完整的)演算法,演算法是可以被整體替換的。而模板方法只能被替換其中的特定點,演算法流程是固定不可變的。

在這樣的細節上看來,模板方法 和 一組策略模式 是不可以劃等號的。

謝霆鋒的風味,有一期是去揚州比賽蛋炒飯。公尺-不同的組公尺可以不同,炒,怎麼炒用什麼鍋不關心,

炒好了用什麼盛飯不關心,使用者是只要選擇那組然後就等著吃蛋炒飯。

下面****實現:

/**

* 裡面方法的定義 有參 無參無限制, 看實際業務需求。

* * @author flynn

* @datetime 2018-08-20 11:15

*/public abstract class danchaofan

}

使用者使用者訪問類即使用者選擇的物件。 

/**

* 炒飯師傅

*/public class danchaofancooker

public friedrice getdanchaofan()

//客戶換個口味的蛋炒飯

void changedanchaofan(danchaofan danchaofan)

}

zile謝大廚的蛋炒飯-子類是實現具體的業務

public class xiecookerdanchaofan extends danchaofan 

@override

void fry()

@override

friedrice getout()

}

子類-揚州大廚的蛋炒飯

public class yangcookerdanchaofan extends danchaofan 

@override

void fry()

@override

friedrice getout()

}

測試:顧客選擇不同組的廚師選擇不同的蛋炒飯來吃

public class maintest 

}

結果:

需要為每乙個基本方法的不同實現提供乙個子類,如果父類中可變的基本方法太多,將會導致類的個數增加,系統更加龐大,設計也更加抽象,此時,可結合橋接模式來進行設計

模板設計模式 設計模式 模板方法模式

在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...

設計模式 模板方法設計模式

物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...

設計模式 模板方法模式

模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...