2013-07-07 72 views
0

我有一個非常具體的情況。情況的背景是我正在爲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));

我認識到這是一種不好的做法,但我爲了尋找解決方案而不知所措。如果有人能指出我的方向正確,我將不勝感激。

回答

0

只要每個構造函數採用不同類型或不同類型的參數,Java允許您爲單個類創建多個構造函數。例如

public class Thing { 

private int value; 

public Thing(int i) { 
    value = i; 
} 
public Thing() { 
    value = 0; 
} 
} 

因此,而不是建設有它的論據兩個空值的類,創建無參數的構造函數和處理與類內的情況。如果將來您決定更改標準,以便在沒有參數的情況下構建該類,那麼這將使得更改變得容易。

+0

我最初在每個具體類都有自己的空構造函數的地方,但是我最終只是在空構造函數中將兩個字段設置爲null,我認爲這仍然是一個不好的做法。我更懷疑是否有更好的模式可供遵循...... –

相關問題