Design pattern for loading multiple message types

后端 未结 4 1494
攒了一身酷
攒了一身酷 2021-01-06 10:29

As I was looking through SO I came across a question about handling multiple message types. My concern is - how do I load such a message in a neat way? I decided to have a s

4条回答
  •  甜味超标
    2021-01-06 10:35

    I agree with CkH in that Factory pattern will solve it. I wrote a silly example as a proof of concept. Not meant to show good class design, just that a simple Factory pattern works. Even if you are using multiple message types and handlers, you should only need to modify this pattern slightly.

    class Class12
    {
        public static void Main()
        {
            Message m = new Message(1, "Hello world");
            IMessageHandler msgHandler = Factory.GetMessageHandler(m.MessageType);
            msgHandler.HandleMessage(m);
    
            Message m2 = new Message(2, "Adios world");
            IMessageHandler msgHandler2 = Factory.GetMessageHandler(m2.MessageType);
            msgHandler2.HandleMessage(m2);
        }
    }
    public class Factory
    {
        public static IMessageHandler GetMessageHandler(int msgType)
        {
            IMessageHandler msgHandler = null;
            switch(msgType)
            {
                case 1: 
                    msgHandler = new MessageHandler1();
                    break;
                case 2: 
                    msgHandler = new MessageHandler2();
                    break;
                default: 
                    msgHandler = new MessageHandler1();
                    break;
            }
            return msgHandler;
        }
    }
    public class Message
    {
        public int MessageType { get; set; }
        public string AMessage { get; set; }
    
        public Message(int messageType, string message)
        {
            this.MessageType = messageType;
            this.AMessage = message;
        }
    }
    public interface IMessageHandler
    {
        void HandleMessage(Message m);
    }
    class MessageHandler1 : IMessageHandler
    {
    
        #region IMessageHandler Members
    
    
        public void HandleMessage(Message m)
        {
            string message = m.AMessage;
            Console.WriteLine(message);
        }
    
        #endregion
    }
    class MessageHandler2 : IMessageHandler
    {
    
        #region IMessageHandler Members
    
    
        public void HandleMessage(Message m)
        {
            string message = m.AMessage;
            Console.WriteLine("Hey there " + message);
        }
    
        #endregion
    }
    

提交回复
热议问题