[J2SE] 副程式的設計

看板java作者 (neverfly)時間17年前 (2009/01/22 17:32), 編輯推噓4(403)
留言7則, 6人參與, 最新討論串1/1
假設有一個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)

01/22 17:57, , 1F
command pattern + factory method ?
01/22 17:57, 1F

01/22 18:19, , 2F
寫一個專門處理指令的方法或類別看看,至少處理刪減方便
01/22 18:19, 2F

01/22 18:27, , 3F
一樓的是正解,實作就是用Map裝入Functor取用
01/22 18:27, 3F

01/22 19:13, , 4F
不好意思,google後看不太出個所以然,請問有範例嗎?
01/22 19:13, 4F

01/22 20:26, , 5F
head first design patterns
01/22 20:26, 5F

01/22 21:00, , 6F
我講的是 Design pattern 中的一環,有興趣可去找相關的書.@@
01/22 21:00, 6F

01/23 07:43, , 7F
map很好用, Map<command, implementation of interface>
01/23 07:43, 7F
文章代碼(AID): #19U3qzJt (java)