2012-10-02 45 views
0

我很抱歉問這樣一個本地化的問題,但直到我得到確認後,我才覺得有信心繼續我的項目。模板模式 - 對於小型項目無用

我已經閱讀了大量有關模板圖案,Wikipedia有一個很好的例子。

它顯示您創建基本的虛擬方法,然後繼承基類並覆蓋您想要的位置。該網站上的例子是壟斷和國際象棋,它們都繼承了基類。

所以,我的問題是,如果你有一個應用程序,它只是將是國際象棋,從來沒有別的,會有在使用模板模式(不是作爲一個教育運動等)的任何好處?

+2

維基百科的例子很荒唐。國際象棋和壟斷之間的差異並不是四個微小的方法 - 有一個是完整的基礎設施,而不是其他的。 –

+1

查看本文,可以讓您更好地瞭解真實場景的使用情況http://www.codeproject。com/Articles/307452/6-common-of-Template-Design-pattern-Design-pat –

回答

9

不,我認爲屬於「You Ain't Gonna Need It」類別。

具體而言,該模式的存在,以解決特定的問題,如果你的代碼不需要來解決這個問題,他們做的是添加的行代碼,而無需任何好處。

+0

我已經猜到了這種情況。聽到確認後很好。謝謝。 – Dave

1

我會建議你寫下你的國際象棋遊戲,然後如果將來會回來改變事物以適應壟斷。但是,如果你想使用模式來學習模式,那麼它就完全不同了,在這種情況下,它很好地開始簡單,因此複雜更容易理解。

2

以非常簡化的和表面的方式表示號,所述模板圖案僅僅是有價值的起始於總的代碼大小和模板代碼大小之間有一定的關係。在你的例子中,國際象棋遊戲將成爲整個程序,所以在這裏不需要使用模板模式。

1

這確實取決於程序的各個部分。 Template的整個思想是從未改變算法,並能夠添加或編輯該算法的某些步驟。

這可能是你永遠不會改變,但是,這與設計原理的問題,這是很好的做法,你以後可能會希望你能實現它們。我會說,如果你100%確定,那麼你可以省略它,因爲它通常可以節省時間和代碼。取決於你是否想要學習模板的使用與否。

另外,GOF principles website相當不錯:

+0

那麼我們假設我的第二場比賽不能結束。我的基類有2個虛函數,分別是displayWinner()和endGame()。這意味着我繼承了一個基類,我只使用可用的一小部分 - 這是一件壞事嗎? – Dave

+2

是的。繼承應遵守Liskov替代原則(http://en.wikipedia.org/wiki/Liskov_substitution_principle)。 –

2

模板圖案,在特定情況下使用。它用於描繪算法,但讓具體步驟不同。

可能是在國際象棋的應用程序非常有用。然而,你不應該開始開發一個應用程序的想法'我要使用這種模式,那個和..'。相反,你開發代碼,你會發現你需要某些模式。

這是測試驅動開發方法非常方便的地方。它允許你在每一步中重構你的代碼。

一本很好的書解釋了這個是Refactoring To Patterns

+0

謝謝你。我會看看這本書。 – Dave