【问题标题】:Java command StorageJava 命令存储
【发布时间】:2014-03-11 01:35:42
【问题描述】:

是的,这个问题是针对一个机器人的,但它需要的机器人知识很少。所以,请不要因此而被推迟。

这个问题可能看起来类似于其他 PircBot 问题,但请耐心等待,事实并非如此。
所以,我最近一直在研究基于 PircBot 的 IRC 机器人,但遇到了一个障碍。我有一个快速增长的命令列表,目前我正在使用其中一个非常低效且非常丑陋的块:

if(message.equalsIgnoreCase("!thatcommand"))
            processMessage(channel,"returnforthatcommand"+sender);

我有很多这样的块,它只是一次又一次地检查消息是否匹配。这是我的主要问题。进程消息方法只是在检查我是否正在运行记录器(将消息打印到控制台)后发送消息。
我真正想做的是精简它。我想制作某种图表,例如 HashMap,它将相应地处理字符串。我还考虑过创建一个存储响应的 Command 类和一个布尔值,用于判断是否必须“操作”聊天器才能使用它。我已经尝试过制作文件并开始在 HashMaps 上进行一些尝试,但我真的可以在最简单和/或最有效的方式上使用一些方向来解决这个问题。我确实为机器人提供了几种不同的“模式”,因此为不同的权限级别制作单独的 HashMap 可能是一个不错的选择。

最后一件事:我稍后想将机器人放入一个带有 GUI 的 Jar 文件中以供外部运行(Eclipse 需要很长时间才能在这台笔记本电脑上启动),并且我希望能够对命令列表进行永久性更改通过机器人本身而不是重新编码......这就是为什么我正在考虑尝试引用一个文件,但后来我遇到了很多问题,程序无法找到所述文件。

有什么建议吗?

好吧,对于不喜欢阅读长篇文章的人:我有一组数据,这些数据由触发器字符串(消息)调用并返回某个响应字符串。我怎样才能存储这些并以最简单的方式调用它们,我怎样才能做到这一点,以便我可以即时将内容写入列表?

【问题讨论】:

    标签: java string hashmap storage


    【解决方案1】:

    您可以使用抽象工厂设计模式。应该是这样的:

    public abstract class CommandFactory {
        private static Map<String,Command> commands;
    
        public static Command getInstance(String commandName) {
            if (commands == null) initialize();
            return commands.get(commandName);
        }
    
        private static void initialize() {
            commands.put("commandA", new CommandA());
            commands.put("commandB", new CommandB());
        }
    
    }
    

    并写 CommandFactory.getInstance("commandString") 代替您的 if 子句。

    【讨论】:

    • 您,先生,是赢家。现在我只需要设置命令列表并获得一个工作文件设置:D
    【解决方案2】:

    建议:实现接口的对象的哈希表,其中包括execute() 等方法。使用哈希表从命令到对象,调用它的执行,完成。

    是的,您需要在服务器启动时初始化该表。无论您是从文字字符串中执行此操作,还是让每个参与者宣布自己的关键字,都取决于您。后者可能更优雅,但不允许使用别名。

    【讨论】:

    • 谢谢先生,+1。但是,我也真的很想得到一些关于如何将它存储在文件中并从/写入到所述文件的帮助......对此有什么想法吗?
    • 这是标准的文件处理,另外一个问题。假设我理解正确。
    • 啊...很遗憾,我没有太多经验。有什么地方可以指导我吗?
    • 有什么像样的Java教程吗?
    • 你有什么推荐的吗?
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多