我有一個非常具體的情況。情況的背景是我正在爲Minecraft構建一個插件,並且我遇到了一些設計問題。我已經構建了一個抽象類,接口和派生的具體類的層次結構(如果它很重要,則使用Java)。這裏是該結構的總體思路:需要知道什麼是註冊命令的最佳做法
公共接口ICommandUsage,ICommandPattern,IPermissionNode
(這些被實現爲使得每個命令必須定義該命令的正確用法,按照一定的圖案,以配合正則表達式,並且具有允許節點,以便命令發送者可以使用該命令或不)
公共抽象類命令=的基類
公開抽象類ConsoleCommand = Command類
公共抽象類的派生子集PlayerCommand = Command類的派生子集
公共抽象類UserCommand = A衍生PlayerCommand的子集
public abstract class ServerAdminCommand = PlayerCommand的派生子集
其餘的類是各種具體實現,從接口和抽象類定義函數。
這是我的困境:啓動插件後,「main」類會註冊所有命令,以便當用戶發出命令時,commandDelegate可以通過模式匹配來解釋命令。模式匹配來自方法getPattern(),該方法返回一個半硬編碼到每個具體類中的字符串。
我的邏輯是每個具體類都應該對自己的模式,權限節點和用法負責,所以這些方法應該在類中存在。
的主要問題是,當我註冊在主類的命令,我在空參數傳遞給構造函數來創建一個「假」命令
即registerCommand(「console_info」 ,新的ConsoleInfo(null,null));
我認識到這是一種不好的做法,但我爲了尋找解決方案而不知所措。如果有人能指出我的方向正確,我將不勝感激。
我最初在每個具體類都有自己的空構造函數的地方,但是我最終只是在空構造函數中將兩個字段設置爲null,我認爲這仍然是一個不好的做法。我更懷疑是否有更好的模式可供遵循...... –