Re: [問題] 一個關於 strategy pattern 的疑惑

看板java作者 (畢業了..@@")時間11年前 (2013/06/24 10:34), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串4/4 (看更多)
※ 引述《adrianshum (Alien)》之銘言: : 開宗明義第一句:Stragety 做成 Singleton 不是正解, : 不要浪費時間。(後面再來詳解) : 首先,Strategy 解決的問題是,把不同情況需要不同的 : 邏輯,包裝成所謂 Strategy, 然後只要替換 strategy, : 就能不影響caller 的 code 之下做到不同的工作。( : 很大概的說法)。 : 以下恕刪 有人討論design patterns,還挺有趣的 這個討論串其實根本重點不是在Strategy pattern 反而是在討論Strategy pattern裡面的Strategy要怎麼產生 XD 我反倒覺得沒有一定的做法, Singleton可能不是所有情況的最佳解,但也是一個解法 畢竟design patterns (這邊指GoF)中的生成模式很多種, 本來就是看你的Strategy的特性來決定用哪種生成模式 甚至直接new也無差,如果你的strategy在使用上不需要太頻繁的產生 什麼時候適合用singleton? 就是當你的系統只需要一個此物件則用此方法 當然Alien大說的狀態考量也是必須考量, 但是事實上狀態也不一定要存在Strategy裡頭, 而可以放在context當中,透過參數傳給Strategy去execute也沒有什麼不可 當然,在你還不確定stragegy將來生成的方法是否可能會改變 你可以把到底用new還是singleton或是其他方法(Flyweight, Object pool,...), 隱藏在一個Factory當中 你可以把 SkillFactory fac = new SkillFactory(); .. SkillStrategy s; s = fac.createFireBall(); s = fac.createKnife(); 將來如果你要擴充成有level的 s = fac.createFireBall(fireBallLevel); 或是你想把new的邏輯改成其他產生方法 只要去改Factory class就好 所以說穿了, 這篇根本不是在討論Strategy pattern 其實是在討論Creational Patterns -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.46.230

06/24 10:56, , 1F
切到重點 :)
06/24 10:56, 1F

06/24 11:36, , 2F
簡明扼要 (y)
06/24 11:36, 2F

06/24 16:53, , 3F
你早點回文就好了 XD
06/24 16:53, 3F
文章代碼(AID): #1Hnx1J7s (java)
文章代碼(AID): #1Hnx1J7s (java)