作者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)
推 TonyQ:command pattern + factory method ? 01/22 17:57
推 f953024:寫一個專門處理指令的方法或類別看看,至少處理刪減方便 01/22 18:19
→ ClareQ:一樓的是正解,實作就是用Map裝入Functor取用 01/22 18:27
→ neverfly:不好意思,google後看不太出個所以然,請問有範例嗎? 01/22 19:13
推 costbook:head first design patterns 01/22 20:26
→ TonyQ:我講的是 Design pattern 中的一環,有興趣可去找相關的書.@@ 01/22 21:00
推 stukk:map很好用, Map<command, implementation of interface> 01/23 07:43