I'm implementing an IRC bot that receives a message and I'm checking that message to determine which functions to call. Is there a more clever way of doing this? It seems like it'd quickly get out of hand after I got up to like 20 commands. Perhaps there's a better way to abstract this?     public void onMessage(String channel, String sender, String login, String hostname, String message){        if (message.equalsIgnoreCase(.np)){//            TODO: Use Last.fm API to find the now playing        } else if (message.toLowerCase().startsWith(.register)) {                cmd.registerLastNick(channel, sender, message);        } else if (message.toLowerCase().startsWith(give us a countdown)) {                cmd.countdown(channel, message);        } else if (message.toLowerCase().startsWith(remember am routine)) {                cmd.updateAmRoutine(channel, message, sender);        }    }
Is there a more intelligent way to do this besides a long chain of if statements or switch?
java;design;abstraction
Use a dispatch table. This is a table containing pairs (message part, pointer-to-function).  The dispatcher then will look like this (in pseudo code):for each (row in dispatchTable){    if(message.toLowerCase().startsWith(row.messagePart))    {         row.theFunction(message);         break;    }}(the equalsIgnoreCase can be handled as a special case somewhere before, or if you have many of those tests, with a second dispatch table).Of course, what pointer-to-function has to look like depends on your programming language. Here is an example in C or C++. In Java or C# you will probably use lambda expressions for that purpose, or you simulate pointer-to-functions by using the command pattern. The free online book Higher Order Perl has a complete chapter about dispatch tables using Perl.