需要知道注册命令的最佳实践是什么

时间:2013-07-07 17:50:16

标签: java design-patterns command pattern-matching minecraft

我有一个非常具体的情况。情况的背景是我正在为Minecraft构建一个插件,我遇到了一些设计问题。我构建了抽象类,接口及其派生的具体类的层次结构(如果重要的话,用Java编写)。以下是结构的一般概念:

公共接口ICommandUsage,ICommandPattern,IPermissionNode

(这些是为了使每个命令都必须定义命令的正确用法,遵循某种模式以匹配正则表达式,并具有权限节点,以便命令发送者可以使用该命令)

public abstract class Command =基类

公共抽象类ConsoleCommand = Command类的派生子集

公共抽象类PlayerCommand = Command类的派生子集

公共抽象类UserCommand = PlayerCommand的派生子集

公共抽象类ServerAdminCommand = PlayerCommand的派生子集

其余的类是从接口和抽象类定义函数的各种具体实现。

这是我的困境:在启动插件时,“main”类注册所有命令,以便当用户发出命令时,commandDelegate可以通过模式匹配来解释命令。模式匹配来自方法getPattern(),它返回一个半硬编码到每个具体类中的String。

我的逻辑是每个具体的类应该对自己的模式,权限节点和用法负责,所以这些方法应该在类本身中存在

主要问题是当我在主类中注册命令时,我必须将null参数传递给构造函数以创建'假'命令...

即。 registerCommand(“console_info”,新的ConsoleInfo(null,null));

我认识到这是一种不好的做法,但我不知道在哪里寻找解决方案。如果有人能指出我正确的方向,我将非常感激。

1 个答案:

答案 0 :(得分:0)

只要每个构造函数采用不同类型或类型的参数,Java就允许您为单个类创建多个构造函数。例如

public class Thing {

private int value;

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

因此,不是为它的参数构造具有两个空值的类,而是创建一个没有参数的构造函数,并在类中处理该情况。如果在将来您决定在没有参数的情况下构建类时更改标准,这将使您可以轻松更改。