模闆方法Template Method
- 0 歸屬元件協作模式
- 1 動機(Motivation)
- 2 結構化軟體設計流程
- 3 面向對象軟體設計流程
- 4 早綁定與晚綁定
- 5 模式定義
- 6 結構
- 7 要點總結
本文根據設計模式學習視訊編寫
李建忠-23個設計模式
0 歸屬元件協作模式
現代軟體專業分工之後的第一個結果是“架構與應用程式的劃分”,“元件協作”模式通過晚期綁定,來實作架構與應用程式之間的松耦合,是二者之間協作時常用的模式。
典型模式
• Template Method
• Observer / Event
• Strategy
這種劃分并非是嚴格的,隻是這些模式(上述三種模式)在這方面(元件協作)展現得更加明顯。
1 動機(Motivation)
(1)在軟體建構過程中,對于某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由于固有的原因(比如架構與應用之間的關系)而無法和任務的整體結構同時實作。
(2)如何在确定穩定操作結構的前提下,來靈活應對各個子步驟的變化或者晚期實作需求?
應用程式開發人員結構化和面向對象程式設計對比
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1EeZRUTwUkaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzQzM1YDZ4EjN5IDZhdzM5IGMxQTN1UmNxYDOhBDO4AzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
程式庫開發人員結構化和面向對象程式設計對比
2 結構化軟體設計流程
3 面向對象軟體設計流程
4 早綁定與晚綁定
Library一般寫得早,完成得早,早綁定是結構化語言程式設計的一般做法,如c語言。而面向對象語言中,可通過虛函數來實作晚綁定。
5 模式定義
定義一個操作中的算法的骨架(穩定),而将一些步驟延遲(變化)到子類中。Template Method使得子類可以不改變(複用)一個算法的結構即可重定義(override 重寫)該算法的某些特定步驟。
——《設計模式》GoF
軟體需要有穩定的部分和變化的部分,識别出變化和穩定分界後,設計模式才有用武之地。一個軟體完全穩定或者全部都在變化,則所有設計模式都将失效。
6 結構
AbstractClass
穩定:
TemplateMethod()相當于Run()
變化:
PrimitiveOperation1()相當于Step2()
PrimitiveOperation2()相當于Step4()
7 要點總結
(1)Template Method模式是一種非常基礎性的設計模式,在面向對 象系統中有着大量的應用。它用最簡潔的機制(虛函數的多态性) 為很多應用程式架構提供了靈活的擴充點,是代碼複用方面的基本實作結構。
擴充:在面向對象設計領域中,擴充即為繼承+虛函數。子類繼承父類,對父類的虛函數重寫的過程即為擴充。
(2)除了可以靈活應對子步驟的變化外,“不要調用我,讓我來調用你”的反向控制結構是Template Method的典型應用。
(3)在具體實作方面,被Template Method調用的虛方法可以具有實作,也可以沒有任何實作(抽象方法、純虛方法),但一般推薦将它們設定為protected方法。