作者neverfly (neverfly)
看板java
标题[J2SE] 副程式的设计
时间Thu Jan 22 17:32:44 2009
假设有一个String 变数叫command,
字串内容可能是
print
save
go
leave
say
之类的指令,大概有二、三十个。
但每一个指令要做的事情都不一样,要呼叫不同的副程式。
目前我的做法是用一个阵列去存目前的指令列表,例如
String[] commands={"print","save","go","leave","say"};
然後根据command的内容去取它的index,像
index=Arrays.asList(commands).indexOf(command)+1;
接着再分配给不同的副程式
switch(index)
{
case 1:
print();break;
case 2:
save();break;
.
.
.
}
但这样有个坏处,因为指令可能会新增或删除,
假设删除了某个指令,造成後面元素的索引值都变了,
呼叫的时候就会呼叫错,而且还是要用一堆case,也没有比较好。
我也可以土法炼钢,
用
if(command.euqal("print"))
print();
else if(command.equal("save"))
save();
不过总觉得如果命令的种类有很多,这两种做法都显得有点笨,
请问一下有更好的处理方式吗?谢谢。
PS:指令跟呼叫的副函式名称不一定相同。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.136.211.210
※ 编辑: neverfly 来自: 220.136.211.210 (01/22 17:36)
1F:推 TonyQ:command pattern + factory method ? 01/22 17:57
2F:推 f953024:写一个专门处理指令的方法或类别看看,至少处理删减方便 01/22 18:19
3F:→ ClareQ:一楼的是正解,实作就是用Map装入Functor取用 01/22 18:27
4F:→ neverfly:不好意思,google後看不太出个所以然,请问有范例吗? 01/22 19:13
5F:推 costbook:head first design patterns 01/22 20:26
6F:→ TonyQ:我讲的是 Design pattern 中的一环,有兴趣可去找相关的书.@@ 01/22 21:00
7F:推 stukk:map很好用, Map<command, implementation of interface> 01/23 07:43