最常用的設計模式 模板方法模式(C 實現)

2021-08-20 03:51:24 字數 1713 閱讀 7583

模板方法模式是設計模式行為型中最簡單的一種設計模式。在實際中你甚至可能經常用到,只是你自己不知道它是一種設計模式罷了。

模板方法模式定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。

角色:抽象類(abstractclass): 定義抽象的原語操作,具體的子類將重定義它們以實現乙個演算法,實現乙個模板方法,定義乙個演算法的骨架。該模板方法不僅呼叫原語操作,也呼叫定義

具體子類 (concreteclass): 實現原語操作以完成演算法中與特定子類相關的步驟。

uml圖:

示例:假如你是乙個老師,現在你要給你的學生出乙份期末考試試卷。你班上有幾十個學生,你將考慮如何為設計考試卷。

經分析顯然學生的試卷大部分類容都是一致的,唯一不一致的是姓名和答案。老師設計好試卷,只需要把試卷交個學生填寫答案即可。學生不需要把題目照抄乙份。

所以我們需要把試卷抽象成基類,並且給學生留下填寫答案以及姓名的地方。

[cpp] 

view plain

copy

class

test*****  

;  void

testtitleone()  

void

testtitletwo()  

virtual

void

answerone() = 0;  

virtual

void

answertwo() = 0;  

virtual

void

studentname() = 0;  

};  

顯然,上面 answerone, ansertwo,studentname 就是學生答題的地方,學生不需要把題目也抄下來。只需要實現我們的這三個方法就可以了。

例如:小紅的試卷

[cpp] 

view plain

copy

class

xiaohongtest***** : 

public

test*****  

void

answerone()  

void

answertwo()  

};  

小張的試卷:

[cpp] 

view plain

copy

class

xiaozhangtest***** : 

public

test*****  

void

answerone()  

void

answertwo()  

};  

客戶端:

[cpp] 

view plain

copy

intmain(

intargc, 

char

* argv)  

總的來說模板方法模式

優點:1.模板方法模式在乙個類中形式化地定義演算法,而由它的子類實現細節的處理。

2.模板方法是一種**復用的基本技術。它們在類庫中尤為重要,它們提取了類庫中的公共行為。

缺點:每個不同的實現都需要定義乙個子類,這會導致類的個數增加,系統更加龐大,設計也更加抽象,但是更加符合「單一職責原則」,使得類的內聚性得以提高。

最常用的GOF設計模式 模板方法

程式設計中的很多概念,生活中都有使用。模板方法設計模式,作為gof的24中設計模式非常常用的設計模式,生活中也經常使用。比如我們申請銀行卡的時候,需要填寫如下模板。每個人申請銀行卡只需要在 的地方替換為自己的資訊就可以了 信用卡申請表 客戶姓名 身份證號 本人同意以下授權,例項省略例項省略例項省略例...

C 設計模式 模板方法模式

模板方法模式 應用廣泛的模式 一 意圖 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法結構即可重定義該演算法的某些特定步驟。二 作用 三 使用技巧 先抽象出乙個類,寫出一些抽象行為放到子類中實現,寫乙個模板方法,推遲到子類實現。四 特點 優點 不用再抄一...

《C 設計模式》 模板方法模式

模板方法模式 提到模板我們經常會想到簡歷模板 ppt模板等,以簡歷模板為例,不同的人可以使用一樣的簡歷模板,在填充內容時根據自己的名字 工作經歷等填寫自己的內容,從而形成不同的簡歷。在oo中模板方法模式和現實中的模板十分相似,首先要有乙個封裝了不可變部分的抽象類 簡歷的大致結構,都有姓名 性別 年齡...