0

剛總結了模板方法戰略如下區別:使用模板方法與策略一起

模板方法使用繼承來改變一個算法的一部分。 策略使用委託來改變整個算法。

什麼在哪裏結合兩種設計的場景是合理和他們的關係會是什麼樣子?

簡單的例子將涉及委託給模板方法的鉤子方法內的戰略,但是,我想不出一個很好的理由爲這樣的設計。此外,不是委託給子類,而是直接委託給策略。但是,如果沒有繼承,我們根本無法談論模板方法。

+1

我覺得這個問題太寬泛了,無法得到任何正確或不正確的答案。 – jaco0646

+0

關於Stack的設計模式有很多問題。他們中的大多數都會詢問有關不同模式之間必須作出選擇的差異和情景。我要求一個可以將它們組合在一起的例子。我認爲這是非常確切的要求。 – Siegmeyer

+0

你提到這將是一個微不足道的例子,將委託給模板方法的鉤子方法內的戰略和我的迴應將是什麼問題。至於證明組合的合理性,正確使用模式是由它或它們被使用的上下文驅動的。由於這個問題沒有任何背景,所以任何答案都是假設的:假設我沒有把兩種模式結合在一起的錯誤 –

回答

2

我認爲完全可以將兩種模式結合起來。

如果您想在運行時更改某個行爲,只需更改策略實例即可使用策略模式。

enter image description here

即,可以通過指定「戰略」,以不同的具體策略類變「語境」的實例的行爲。它提供的功能與具有可以更改的字段以及根據此字段的內容執行if/elses鏈或交換機相同的功能。戰略模式只是一種更復雜的方式來做條件。在硬編碼條件下使用策略的優點是,您可以通過添加新類來添加更多條件,而無需修改已有的條件(「SOLID」原則中的「O」)。

另一方面,模板方法定義了一些算法,其中某些「鉤子」保持打開狀態,必須由具體類覆蓋。

enter image description here

兩種模式是關心的一個算法由兩個不同的點的觀點:戰略有關在運行時交換的算法的約增韌的算法的結構的能力,和模板法。我不明白你爲什麼不能把兩者結合起來。對我來說,完全有可能制定一個定義爲模板方法的策略。

+0

我沒有考慮使用策略,它是一種模板方法。這實際上是有道理的。我猜想,我想把它們機械地結合起來。 – Siegmeyer