作者popcorny (毕业了..@@")
看板java
标题Re: [问题] 一个关於 strategy pattern 的疑惑
时间Mon Jun 24 10:34:57 2013
※ 引述《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
1F:推 adrianshum:切到重点 :) 06/24 10:56
2F:推 lovdkkkk:简明扼要 (y) 06/24 11:36
3F:→ swpoker:你早点回文就好了 XD 06/24 16:53