title: Design pattern for handling multiple message types
body: <p>I've got the GOF sitting on my desk here and I know there must be some kind of design pattern that solves the problem I'm having, but man I can't figure it out.</p>
  
  <p>For simplicities sake, I've changed the name of some of the interfaces that I'm using.</p>
  
  <p>So here's the problem, on one side of the wire, I've got multiple servers that send out different types of messages. On the other side of the wire I have a client that needs to be able to handle all the different types of messages. </p>
  
  <p>All messages implement the same common interface IMessage. My problem is, when the client gets a new IMessage, how does it know what type of IMessage its received?</p>
  
  <p>I supposed I could do something like the following, but this just FEELS awful.</p>
  
  <pre><code>TradeMessage tMessage = newMessage as TradeMessage;
  if (tMessage != null)
  {
      ProcessTradeMessage(tMessage);
  }
  
  OrderMessage oMessage = newMessage as OrderMessage;
  if (oMessage != null)
  {
      ProcessOrderMessage(oMessage);
  }
  </code></pre>
  
  <p>The second thought, is to add a property to IMessage called MessageTypeID, but that would require me to write something like the following, which also FEELS awful.</p>
  
  <pre><code>TradeMessage tMessage = new TradeMessage();
  if (newMessage.MessageTypeID == tMessage.MessageTypeID)
  {
      tMessage = newMessage as TradeMessage;
      ProcessTradeMessage(tMessage); 
  }
  
  OrderMessage oMessage = new OrderMessage();
  if (newMessage.MessageTypeID == oMessage.MessageTypeID)
  {
      oMessage = newMessage as OrderMessage;
      ProcessOrderMessage(oMessage);
  }
  </code></pre>
  
  <p>I know this general problem has been tackled a million times, so there has to be a nicer way of solving the problem of having a method that takes an interface as a parameter, but needs different flow control based on what class has implemented that interface. </p>