我有一个非常具体的情况。这种情况的背景是我正在为 Minecraft 构建一个插件,但我遇到了一些设计问题。我已经建立了抽象类、接口及其派生的具体类的层次结构(如果重要的话,在 Java 中)。这是结构的一般概念:
公共接口 ICommandUsage、ICommandPattern、IPermissionNode
(这些实现是为了每个命令必须定义命令的正确用法,遵循一定的模式以匹配正则表达式,并具有权限节点,以便命令发送者可以使用或不使用命令)
公共抽象类命令 = 基类
公共抽象类 ConsoleCommand = Command 类的派生子集
公共抽象类 PlayerCommand = Command 类的派生子集
公共抽象类 UserCommand = PlayerCommand 的派生子集
公共抽象类 ServerAdminCommand = PlayerCommand 的派生子集
其余的类是从接口和抽象类定义函数的各种具体实现。
这是我的困境:在启动插件时,“main”类会注册所有命令,以便当用户发出命令时,commandDelegate 可以通过模式匹配来解释命令。模式匹配来自 getPattern() 方法,该方法返回一个字符串,该字符串被半硬编码到每个具体类中。
我的逻辑是每个具体的类都应该对自己的模式、权限节点和用法负责,所以这些方法应该存在于类本身中。
主要问题是,当我在主类中注册命令时,我必须将空参数传递给构造函数以创建“假”命令......
即registerCommand("console_info", new ConsoleInfo(null, null));
我承认这是一种不好的做法,但我不知道在哪里寻找解决方案。如果有人能指出我正确的方向,我将不胜感激。