回答
一個重要的標準是多態性是否會產生策略會避免的耦合。例如,如果爲使用低級I/O函數的類樹實施「save()」方法,那麼如果使用多態性,則類的樹將耦合到I/O系統,而不是「 t之前。但是,如果您使用策略模式,那麼策略對象將充當「緩衝區」並使類樹不依賴於I/O。
你用null開始你的應用程序。
下一步是多態的原始代碼。
基本情況下,它可以保持這種方式 - 這不是問題。
如果你希望你的應用程序更加靈活,爲變化做好準備,並且你打算繼續開發它 - 現在是時候去尋找一些設計模式了,當多態現象給出時,策略就是你應該考慮的巫師之一一些麻煩。
意向策略:
定義一系列的算法,封裝每一個,使得它們可以互換。策略可以讓算法獨立於使用它的客戶端。
動機使用策略:
許多算法打破文本流成存在lines.Hard佈線所有 這種算法到需要它們的類是不可取的幾個 原因:
·如果包含 換行代碼,需要換行的客戶會變得更加複雜。這使得客戶端變得越來越難以維護,特別是如果它們支持多種換行算法的話。
·不同的算法在不同的時間適用。如果我們不全部使用它們,我們不希望 支持多種換行算法。
·當線路中斷 是客戶端的一個組成部分時,很難添加新的算法和改變現有的算法。 我們可以通過定義封裝不同的 換行算法的類來避免這些問題。以這種方式封裝的算法被稱爲 策略。
後果:策略類的相關algorithms.Hierarchies的
家庭定義 家庭的算法或行爲的上下文重用。繼承可以幫助將算法的常用功能分解出來。
Subclassing.Inheritance的替代方法提供了另一種支持多種算法或行爲的方法。您可以直接對Context類 進行子類化,以賦予它不同的行爲。但是這會將行爲 硬連接到Context中。它將算法實現與Context相混合,使上下文更難以理解,維護和擴展。並且您不能動態改變 算法。你會發現許多相關的類,它們只有它們所使用的算法或行爲不同。將 算法封裝在單獨的策略類中,可讓您獨立於其上下文來更改算法 ,從而更輕鬆地切換,理解和擴展 。
策略消除條件語句。策略模式提供 條件語句的替代選擇所需的行爲。 當不同的行爲被集中到一個類中時,很難避免使用條件語句來選擇正確的行爲。在單獨的策略類中封裝 行爲將消除這些條件 語句。
- 1. 什麼時候最好在PHP中使用switch語句?
- 2. 什麼時候在Java中使用switch語句
- 3. 什麼時候應該嘗試消除switch語句?
- 4. 沒有'switch'語句的策略模式?
- 5. 什麼時候出現多態性
- 6. C#的switch語句重構
- 7. switch語句是什麼?
- 8. 什麼時候重構代碼?
- 9. 什麼時候選擇CROSS APPLY和EXISTS?
- 10. 什麼時候會選擇沒有更新導致鎖定的語句?
- 11. 設計模式重構switch語句
- 12. 什麼時候注入構造函數,什麼時候是CDI
- 13. 何時選擇LAMP over ASP.NET?
- 14. 什麼時候應該將std :: async與sync同時用作策略?
- 15. 什麼時候header(..)語句在PHP中生效?
- 16. 什麼時候在iOS中執行sqlite中的finalize語句?
- 17. 在switch語句
- 18. 在switch語句
- 19. switch語句中多個值的powershell語法是什麼?
- 20. 什麼時候byte_order更改被忽略?
- 21. 什麼時候innodb_lock_wait_timeout被忽略?
- 22. 用更優雅的代碼重構多個switch語句
- 23. MariaDB中的多重選擇語句MySQL
- 24. switch語句中的switch語句?
- 25. 什麼時候創建窗口句柄
- 26. 重構在什麼時候變得不值得?
- 27. 什麼時候應該使用Grid over Grid?
- 28. MACRO錯誤使用switch語句時
- 29. MonoDevelop什麼時候生成Connect語法
- 30. 同時取消多個頁面的最佳策略是什麼?