定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法是的子類可以不改變乙個演算法結構即可重定義該演算法的某些特定步驟【dp】
通俗地說,就是將重複的步驟通過搬移到超類裡面,去除子類的重複**
uml圖:
![這裡寫描述](
**:
/**
* 抽象類,提供模板方法,但是其實現需要推遲到子類
*/public
abstract
class
abstractclass
}/**
* 具體類a,實現抽象類的一些抽象操作
*/public
class
concreteclassa
extends
abstractclass
/*** 實現抽象類的抽象操作2
*/@override
public
void
primitiveoperation2()
}/**
* 具體類b,實現抽象類的抽象操作,但是實現方式不同
*/public
class
concreteclassb
extends
abstractclass
/*** 實現抽象操作2的另一種方法
*/@override
public
void
primitiveoperation2()
}/**
* 客戶端類,用於測試
*/public
class
client
}
例子背景:
用模板方法模式來模擬下面的過程:
抄試卷,比如老師在黑板上寫出試題,學生每個人都需要抄乙份,並且寫上自己的答案。
這種情況下,我們希望學生抄的題目都是一樣的,而不同的應該就在於每個人的答案
所以,抄試題的過程是重複的,寫上自己的答案的過程是不同的
**:
/**
* 該類是學生抄試題和填寫答案的超類
*/public
class
allstudent
/*** 抄寫題目2和書寫其答案
*/public
void
question2()
/*** 抄寫題目3和書寫其答案
*/public
void
question3()
/*** 模擬書寫題目1的答案
*@return 返回書寫答案
*/protected string answer1()
/*** 模擬書寫題目2的答案
*@return 返回書寫答案
*/protected string answer2()
/*** 模擬書寫題目3的答案
*@return 返回書寫答案
*/protected string answer3()
}/**
* 學生a抄寫題目與回答題目, 因為題目的抄寫應該每個學生都是一直的,所以這裡只要重寫父類回答問題的方法
*/public
class
studenta
extends
allstudent
@override
protected string answer2()
@override
protected string answer3()
}/**
* 學生b抄寫題目與回答題目, 因為題目的抄寫應該每個學生都是一直的,所以這裡只要重寫父類回答問題的方法
*/public
class
studentb
extends
allstudent
@override
protected string answer2()
@override
protected string answer3()
}/**
* 客戶端類,用於測試
*/public
class
client
}
要完成在某一細節層次的乙個過程或一系列步驟,但是個別步驟在更詳細的層次上的實現可能不同的時候,我們就可以考慮使用模板模式。
在開發過程中我們通常遇到這樣的情況:就是我們要實現乙個過程或者一系列步驟,這些步驟可能在更詳細的層次上的實現會稍有不同,而大部分或者邏輯骨架是相同的,因為重複=易錯+難修改(一錯導致多出錯、一改要多處修改),所以有必要把重複的步驟或者骨架提取出來,這樣修改維護起來就容易多了。
模板設計模式 設計模式 模板方法模式
在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式進行。這種型別的設計模式屬於行為型模式。首先需要一定抽象的定義,沒有具體的實現,但是在抽象類的行為中,子類去程序這個抽象類,重寫抽象方法,實現不...
設計模式 模板方法設計模式
物件導向,萬物皆物件,用乙個雷來反應現實生活中的東西。比如銀行系統,業務公升級 活期 定期,差別很小,就加判斷 違背單一職責 差別比較多,尤其是模擬較複雜,型別拆分下。拆分之後,自然就有父類,重用。利率 每個客戶端都有利率,但是各不一樣 抽象方法。show 不分客戶端是一樣的,個別客戶端是不一樣的 ...
設計模式 模板方法模式
模板方法模式 類庫中大量使用,例如idbconnection介面 dbconnection抽象類 派生的sqlconnection和派生的oledbconnection就是使用了這種方法 1。介面,到能做的定義進來。一種規範 2.把共同的部分進去分離出來,放到乙個抽象的父類去實現.3.子類中實現 不...