Re: [問題] 一個關於 stragety pattern 的疑惑
說真的,Design Pattern 什麼的太難了我不懂
※ 引述《ooooooo (感覺銜接最重要...)》之銘言:
: 用個之前在板上看見的例子說明,
: 假設要寫個遊戲,遊戲中有各種角色:戰士、法師、術士.....等
: 當然每個角色都有技能可以攻擊。
: 我構想的設計是,
: class Character{ //各種角色的 super class
: attackStrategy atk ; //用來攻擊的策略
^^
果然有 typo,要大寫阿老闆
: public void attack(){
: atk.attack();
: }
: }
: class Warrior extends Character{
: //warrior 使用 knife 進行攻擊
: AttackStrategy atk = new KnifeStrategy();
: }
: class Wizard extends Character{
: //wizard 可使用fireball攻擊
: AttackStrategy atk = new FireBallStrategy();
: }
: 其他角色以此類推。
: 關於 AttackStrategy、KnifeStrategy、FireBallStrategy
: 就是strategy 模式,code 我就不寫了。
: 我的問題在於,假設一個角色,不只有一種技能可以攻擊,
: 也就是依照角色的不同,可能有不同的攻擊技能的時候。
: ex wizard 可以用 fireball、也可以用 fireStorm
: 但 warrior 只能用 knife
: 那當一個 wizard 在切換 fireball 與 fireStrom 攻擊的時候,
: 該怎麼去處理?
: 若每次切換,就 new 出來一個對應的 strategy ,感覺好像怪怪的,
: 萬一切換次數一多,不就一堆垃圾物件?(當然 java 會自己回收。)
: 但我還是覺得怪怪的,感覺應該有更好的方法可以處理這樣的行為才對,
: 麻煩板友指點一下,有種卡住的感覺,謝謝。
其實我還蠻不懂為什麼要重新 new 一個 FooStrategy 的?
或著這樣講好了
理論上來說,Wizard 應該會有個 public method 去決定要用哪種攻擊方式
至少也會有個時間點去切換 strategy
還是說用最簡單的想法
在呼叫 attact() 之前搞定 atk 的內容就好
那麼,為什麼要 new 「一堆」物件出來?
更何況,理論上 FireBallStrategy 應該就只是個公式
所以弄成 singleton(這是 tkcn 大人的意思嗎?)(我有挪台)
統統都是用同一個 static instance 來處理好像也很合理?
我大概會想弄成這樣
public class FireBallStrategy {
//武器要加乘,不然就不能賣虛寶了阿 [喂喂]
public static void attact(int level, Weapon weapon) {
}
}
然後用 Reflection(如果可以的話)(GWT 表示:)?
所以... ㄜ... 某種角度可以說我不太懂你的糾結點在哪裡?
當然,我講得東西可能完全脫離什麼 Strategy Pattern 我不知道 [遮臉]
就說了,太難的東西我不懂...... [逃]
--
錢鍾書: 說出來的話
http://www.psmonkey.org
比不上不說出來的話
Java 版 cookcomic 版
只影射著說不出來的話
and more......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.12.56
推
06/21 00:41, , 1F
06/21 00:41, 1F
→
06/21 00:46, , 2F
06/21 00:46, 2F
→
06/21 00:52, , 3F
06/21 00:52, 3F
推
06/21 00:59, , 4F
06/21 00:59, 4F
→
06/21 10:23, , 5F
06/21 10:23, 5F