作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] 一个关於 stragety pattern 的疑惑
时间Fri Jun 21 00:32:03 2013
说真的,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
1F:推 ooooooo:朋友也跟我说用 singleton 去解!我明天好好想想!感谢大家 06/21 00:41
2F:→ tkcn:比起大小写问题,标题的 typo 才是问题吧 06/21 00:46
3F:→ PsMonkey:果然是 tkcn 大人... Orz 06/21 00:52
4F:推 ooooooo:赶快偷改一下....超常打错这个字的(汗) 06/21 00:59
5F:→ mars90226:是attack不是attact喔XDD 06/21 10:23