1. 程式人生 > >比較Template method、Strategy和Builder模式隨想

比較Template method、Strategy和Builder模式隨想

Template methodStrategy模式經常在框架設計中被使用,並且二者很相似,都是父類定義功能介面,將具體的實現留個子類,有時二者可以相互替換。

Template method主要是父類將一個功能的實現分成幾個小的步驟,並且在模版方法中規定了這些步驟的執行順序,同時定義了這些子步驟的protected型別的方法留給子類實現,宣告為protected主要是以防止使用者不恰當的使用這些方法而產生異常。實現者不需要考慮這些子步驟地執行順序,只需要實現具體的功能就行了。其實每一個子類去具體的實現這些子步驟,也有策略的味道,只不過Template method主要是在父類封裝了子步驟地順序,從而簡化使用者的負擔以及減少重複的程式碼的目的。

Strategy模式主要是父類(更常用的是介面)定義一個具體的功能,不同的子類使用不同的策略去具體的實現。其實針對介面程式設計,一方面達到依賴於介面而不是具體實現的目的,另一方面也是策略模式的一個實現吧,介面規定了功能,不同的實現者提供了不同的策略。常用的Dao模式提供了隔離資料訪問與業務層的同時,也提供了可替換的策略,來方便在不同的資料庫間移植,或者使用不同的技術來實現。

Template method適用域可能更小一點,靈活性也差一點。如果子類也可以訂製這些子步驟的順序,那就不適合使用Template。使用策略模式,則沒有那麼多的限制,甚至常常沒有子步驟。不過實現者需要知道整個演算法的流程,同時也可能暴露過多的行為,從而可能造成使用者誤用的可能。

談到Template method,我倒想到了Builder模式,雖然二者一個是行為模式,一個是建立型模式,但是二者還是有不少相似之處的。Builder模式是隱藏建立的過程,使用者只需要使用build方法就能夠獲得整個要建立的東西,而不需要考慮具體的建立步驟,Builder模式其實也算(或者可以)用模版方法來實現,只不過這個模版方法是建立物件的而已。