Re: [問題] 一個關於 strategy pattern 的疑惑
※ 引述《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
06/24 11:36, 2F
→
06/24 16:53, , 3F
06/24 16:53, 3F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):