![](/img/trans.png)
[英]Which is the best way to implement ButtonListeners in different classes?
[英]Best way to implement multiple small classes?
因此,我將描述我的問題。 用戶輸入命令。 我需要處理該命令並相應地運行特定功能。
我使用switch語句查找用戶輸入了什么命令,但我認為它變得相當混亂。 我應該繼續采用這種方法嗎?
我決定為每個可能的命令創建一個類,將它們放入數組中,而不是使用switch語句,使用循環來檢查是否有任何命令適合並調用存儲在該命令對象中的函數。 目前,我實現了大約10條命令,但是數量會增加。
為每個新命令類創建一個新文件看起來確實很麻煩,而且可能很麻煩,所以我想知道是否有更好的方法來實現我想要的功能,或者是否有更好的方法來實現所有功能?
我喜歡讓您的類代表每個命令的方法,它實際上非常聰明。 也許您不知道這一點,但是您正在涉及狀態模式的關鍵方面,這就是我要使用的這種類型的問題。
因此,您可以按照自己的方式保留代碼,或者使用狀態模式實現代碼的更復雜但更靈活的版本。
我認為您也可以使用一個enum
來表示各種命令,其中該枚舉實現了一個接口,因此每個枚舉實例都必須實現“命令”方法,無論您要調用什么方法(doIt(),run(),等等)。
像這樣: 為什么枚舉實現接口?
另一種方法是創建一個Command類,並為每個命令/功能提供一個公共內部類。 這樣,您無需為每個命令創建單獨的.java文件,並且可以通過Command.FirstCommand等單獨使用每個命令。
至於嘗試不使用開關箱來確定您需要調用的命令,請看下面的示例代碼:
public class Command {
class InnerCommand implements InnerInterface {
// implement execute command
}
class AnotherInnerCOmmand implements InnerInterface {
// implement execute command
}
interface InnerInterface {
void executeCommand();
}
}
您可以使用HashMap<String, InnerInterface>
將String命令映射到要基於輸入運行的特定命令,請確保將HashMap填充到其他位置(也許在Command類中)。 然后,無需使用開關盒,只需執行以下操作:
public static void doCommand(String commandString) {
HashMap<String, InnerInterface> commandsMap = new HashMap<String, Command.InnerInterface>();
InnerInterface commandInterface = commandsMap.get(commandString);
}
然后,只需調用commandInterface.executeCommand();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.