接下來我們進行第乙個設計模式的學習:template method設計模式,也就是模板方法設計模式,之所以把template method設計模式作為設計模式學習的入門,主要有以下幾個方面的原因:
//程式庫開發人員
class library
void step3()
void step5()
};
//應用程式開發人員
public;
bool step2()
void step4()
}int main()
for(int i = 0; i < 4; i ++)
lib.step5();
}
(第二段)
//程式庫開發人員
class library
for(int i = 0; i < 4; i ++)
step5();
} //c++中基類的虛構函式應該是虛函式,否則在多型中呼叫析構函式時可能無法呼叫到子類的析構函式
virtual ~library(){}
protected:
void step1()
void step3()
void step5()
virtual bool step2() = 0;//變化
virtual void step4() = 0;//變化
};
//應用程式開發人員
protected:
virtual bool step2()
virtual void step4()
};int main()
可以看出,上面的兩段程式完成的是同樣的功能:就是實現run()方法,並且兩段程式中的run()方法實現的內容是一樣的,但是兩段程式的區別也是比較的明顯:
第一段程式
第二段程式
結構化軟體設計流程
物件導向軟體設計流程
library工作人員:開發1,3,5三個步驟
library工作人員:開發1,3,5三個步驟,開發程式主流程
從程式中我們可以看出:步驟1,3,5和run()方法是穩定的,步驟2,4是變化的。
兩段程式的區別在於第一段程式的run()方法由應用程式開發人員進行開發,第二段程式的run()方法由函式庫開發人員進行開發。也就是說,第一段程式應用程式開發人員既實現了穩定的部分,也實現了變化的方法,第二段程式對穩定的部分和變化的部分的分工比較明確。
第一段程式實現的是應用程式對函式庫的呼叫,是為早繫結;第二段程式實現的是函式庫對應用程式的呼叫,是為晚繫結,而設計模式的原則之一就是盡量使用晚繫結而不去使用早繫結。
綜上所述:從設計模式的角度來看,物件導向軟體設計方法優於結構化軟體設計方法。
《設計模式》一書中對template method模式的定義如下:
定義乙個操作中的演算法的骨架(穩定),而將一些操作延遲(變化)到子類中(定義乙個虛函式讓子類去實現或者說重寫這個虛函式),template method使得子類可以不改變(復用)乙個演算法的結構即可重定義(override重寫)該演算法的某些特定步驟。
設計模式的使用有乙個前提條件就是必須要有穩定點,如果沒有穩定點的話,那所有的東西都是可以變化的,也就不存在復用的必要了,那麼也就沒有應用設計模式的必要了。
設計模式最大的作用就是在穩定和變化之間尋找隔離點,然後分離他們,從而管理變化。
說實話,我並沒有弄清楚應該怎麼樣去寫明白我學的這乙個template method模式,因為我感覺這乙個設計模式就是物件導向程式設計與結構化程式設計的對比,並沒有一定的誰優誰劣。
所以在這一篇部落格中我只能盡可能地寫出我從這乙個設計模式中學到的知識,或者說是我認為比較重要的點,希望能對大家有所幫助。
設計模式 Template模式
在物件導向系統的分析與設計過程中經常會遇到這樣一種情況 乙個流程可以分為a,b,c 多個步驟,但在具體的步驟中可能會有不同的情況出現,這時就template模式就非常有用 class p object defa pass defb pass defoperate a b class sub p de...
設計模式學習筆記 模板 Template 模式
設計模式 設計模式,模板模式,template,模板方法 模板模式中的角色 模板模式可以很簡單的理解為,通過同乙個模具倒出來的模型。形狀上是一樣的,但是其上的花紋,紋理等卻可能完全不一樣。這裡的模板模式,特指template method模板方法模式。其原理為父類制定好規範 待實現的方法和模板方法。...
設計模式筆記 Template模式
模板模式,邏輯很清晰,容易實現,用的也多!需求情景就是 對乙個業務邏輯 演算法實現,在不同物件中有不同的細節實現,但是邏輯的框架是相同的!就是說它們的操作步驟 介面是相同的,以繼承的方式實現!看下圖uml就明白了 到公司應聘,公司給每人發乙個簡歷表,讓大家填,而不是直接用每個人自己帶的簡歷!有幾點 ...