我有一個基於PircBotX框架的Java bot。一個IRC機器人只是回覆命令。所以現在我有一個靜態字符串列表,例如: !weather
,!lastseen
和我的Main.java
文件中的喜歡。創建模塊Java
對於我添加的每個命令,我創建一個新的靜態字符串,並比較每個傳入的消息是否以任何定義的命令開頭。
僞
Receive message `m`
if m matches !x
-> do handleX()
if m matches !y
-> do handleY()
這是basicly一個非常大的,如果測試。
我想要做的是創建某種骨架類,它可能實現了一個接口並定義了它應該在哪個命令上行動,以及定義了它應該執行的代碼的主體。東西我想的是如下圖所示:在這樣一類
public class XkcdHandler implements CommandHandlerInterface
{
public String getCommand()
{
return "!xkcd";
}
public void HandleCommand(String[] args, Channel ircChannel)
{
// Get XKCD..
ircChannel.send("The XKCD for today is ..");
}
}
我可以簡單地添加一個新的類,並用它做。現在我必須添加命令,在列表中添加if測試,並將該方法添加到Main.java類。這僅僅是一個軟件架構的好例子。
有沒有一種方法可以創建自動加載這些類(或這些類的實例)的東西,然後調用類似invokeMatchingCommand()
的東西?然後,此代碼可以迭代已加載命令的列表,並在匹配的實例上調用HandleCommand
。
更新 隨着BalckEye記答案我想我可以加載在一個包(即Modules
),實例化並將其存儲在列表中找到的所有類。通過這種方式,我可以按照他的回答中所示處理每條消息(即迭代列表併爲每個匹配命令執行類方法)。
但是,根據this thread,它似乎並不真正可行。在這一點上,我看看類加載器,也許這將是一個可行的解決方案。
老實說,我得到你想要動態做到這一點,但它是一個相當麻煩來做到這一點。當你使用user4335475的方法時,它會很簡單和乾淨。另外,它更多的API風格:P – engineercoding 2014-12-08 17:33:38