看板 java 關於我們 聯絡資訊
假設有一個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