天天看點

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

模闆方法Template Method

  • 0 歸屬元件協作模式
  • 1 動機(Motivation)
  • 2 結構化軟體設計流程
  • 3 面向對象軟體設計流程
  • 4 早綁定與晚綁定
  • 5 模式定義
  • 6 結構
  • 7 要點總結

本文根據設計模式學習視訊編寫

李建忠-23個設計模式

0 歸屬元件協作模式

 現代軟體專業分工之後的第一個結果是“架構與應用程式的劃分”,“元件協作”模式通過晚期綁定,來實作架構與應用程式之間的松耦合,是二者之間協作時常用的模式。

 典型模式

• Template Method

• Observer / Event

• Strategy

這種劃分并非是嚴格的,隻是這些模式(上述三種模式)在這方面(元件協作)展現得更加明顯。

1 動機(Motivation)

(1)在軟體建構過程中,對于某一項任務,它常常有穩定的整體操作結構,但各個子步驟卻有很多改變的需求,或者由于固有的原因(比如架構與應用之間的關系)而無法和任務的整體結構同時實作。

(2)如何在确定穩定操作結構的前提下,來靈活應對各個子步驟的變化或者晚期實作需求?

應用程式開發人員結構化和面向對象程式設計對比

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

程式庫開發人員結構化和面向對象程式設計對比

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

2 結構化軟體設計流程

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

3 面向對象軟體設計流程

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

4 早綁定與晚綁定

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

Library一般寫得早,完成得早,早綁定是結構化語言程式設計的一般做法,如c語言。而面向對象語言中,可通過虛函數來實作晚綁定。

5 模式定義

定義一個操作中的算法的骨架(穩定),而将一些步驟延遲(變化)到子類中。Template Method使得子類可以不改變(複用)一個算法的結構即可重定義(override 重寫)該算法的某些特定步驟。

——《設計模式》GoF

軟體需要有穩定的部分和變化的部分,識别出變化和穩定分界後,設計模式才有用武之地。一個軟體完全穩定或者全部都在變化,則所有設計模式都将失效。

6 結構

模闆方法——設計模式0 歸屬元件協作模式1 動機(Motivation)2 結構化軟體設計流程3 面向對象軟體設計流程4 早綁定與晚綁定5 模式定義6 結構7 要點總結

AbstractClass

穩定:

TemplateMethod()相當于Run()

變化:

PrimitiveOperation1()相當于Step2()

PrimitiveOperation2()相當于Step4()

7 要點總結

(1)Template Method模式是一種非常基礎性的設計模式,在面向對 象系統中有着大量的應用。它用最簡潔的機制(虛函數的多态性) 為很多應用程式架構提供了靈活的擴充點,是代碼複用方面的基本實作結構。

擴充:在面向對象設計領域中,擴充即為繼承+虛函數。子類繼承父類,對父類的虛函數重寫的過程即為擴充。

(2)除了可以靈活應對子步驟的變化外,“不要調用我,讓我來調用你”的反向控制結構是Template Method的典型應用。

(3)在具體實作方面,被Template Method調用的虛方法可以具有實作,也可以沒有任何實作(抽象方法、純虛方法),但一般推薦将它們設定為protected方法。

繼續閱讀