我目前正在使用C#开发一个IRC bot。我有一个IRC类,包含有关IRC服务器(IP,端口,通道,尼克)的信息以及发送和读取等方法。每当我从服务器收到任何信息时,我都会将它传递给消息处理程序,消息处理程序通过使用如下所示的目录来检查它是否是命令
private Dictionary<string, ICommandState> _commandList;
我正在使用gof状态模式来创建新命令。我拥有的一个命令是PingCommand
这个命令想要编写&#34; PONG&#34;输出到IRC服务器作为响应&#34; PING&#34;。我已经绘制了快速类图
所以这是我的问题/问题。我想要PingCommand(以及其他正确的命令)来了解在&#34; MainClass&#34;中创建的IRC对象。一种方法是将它传递给MessageHandler的构造函数,然后MessageHandler将它传递给PingCommand,但我觉得这样做会很糟糕,因为MessageHandler不需要IRC对象。
另一种方法是让IRC类静态但我不太确定这是不是一个好方法呢?
我能提出的最后一个解决方案(以及我使用atm的解决方案)是创建另一个名为CommandProvider的类,它基本上像这样设置字典:
public CommandProvider(IIRC irc)
{
CommandList = new Dictionary<string, ICommandState>();
CommandList.Add("PING",new PingCommand() {Irc = irc});
CommandList.Add("376",new Command376() { Irc = irc });
CommandList.Add("366",new Command366() { Irc = irc });
}
然后将它传递给messageHandler,但我仍然不太确定这是否是一个好方法呢?
我希望你们能给我一些关于如何进行的建议