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

看板java作者 (痞子軍團團長)時間12年前 (2013/06/21 00:32), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串1/1
說真的,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
朋友也跟我說用 singleton 去解!我明天好好想想!感謝大家
06/21 00:41, 1F

06/21 00:46, , 2F
比起大小寫問題,標題的 typo 才是問題吧
06/21 00:46, 2F

06/21 00:52, , 3F
果然是 tkcn 大人... Orz
06/21 00:52, 3F

06/21 00:59, , 4F
趕快偷改一下....超常打錯這個字的(汗)
06/21 00:59, 4F

06/21 10:23, , 5F
是attack不是attact喔XDD
06/21 10:23, 5F
文章代碼(AID): #1Hmow6HJ (java)