Which design pattern to use for flexible Message Sending?
c#, design-patterns
Solution
I am thinking of below solution:
Interface IMessageSystem
{
void Send();
}
Public class Email : IMessageSystem
{
public void Send()
{
console.writeline("Message From Email");
}
}
Public class SMS : IMessageSystem
{
public void Send()
{
console.writeline("Message From SMS");
}
}
Public class Twitter : IMessageSystem
{
public void Send()
{
console.writeline("Message From Twitter");
}
}
Interface ISendMessageStrategy
{
void SendMessages();
}
Public class SendMessageStrategyForRoleA : ISendMessageStrategy
{
Public void SendMessages()
{
Email objemail = new Email();
objemail.Send();
SMS objSMS = new SMS();
objSMS .Send();
Twitter objtwitter = new Twitter();
objtwitter.Send();
}
}
Public class SendMessageStrategyForRoleB : ISendMessageStrategy
{
Public void SendMessages()
{
SMS objSMS = new SMS();
objSMS .Send();
}
}
Public class SendMessageStrategyForRoleC : ISendMessageStrategy
{
Public void SendMessages()
{
Twitter objtwitter = new Twitter();
objtwitter.Send();
}
}
Public class SendMessageSystem
{
public ISendMessageStrategy sendMessageStrategy;
List<Keyvaluepair<string,ISendMessageStrategy>> lstkeyval = new List<Keyvaluepair<string,ISendMessageStrategy();
public SendMessageSystem(string role)
{
lstkeyval.add(new keyvaluepair<string,ISendMessageStrategy>("A",new SendMessageStrategyForRoleA()));
lstkeyval.add(new keyvaluepair<string,ISendMessageStrategy>("B",new SendMessageStrategyForRoleB()));
lstkeyval.add(new keyvaluepair<string,ISendMessageStrategy>("C",new SendMessageStrategyForRoleC()));
sendMessageStrategy = lstkeyval.where(x=>x.Key == role).Value;
}
public void SendMessage ()
{
sendMessageStrategy.SendMessages();
}
}
public class programme
{
static void main (string[] args)
{
SendMessageSystem objMessage = new SendMessageSystem("A");
objMessage.SendMessage();
}
}
Problem
I need to implement a Message Sending functionality based on Roles. - Role A: Message should be sent by Email and sms - Role B: Message should be sent by only Email - Role C: Message should be sent by only sms - Role D: Message should be sent by Twitter I have to accommodate for change regarding what Roles can use what Message Sending functionality, e.g. I need to be able to change Role B to also include sms. Any of the Roles may need any of the Message Sending functionality. I have considered having one Interface IMessageChannel with a method SendMessage. Then three classes implementing that interface, e.g. Email, SMS and Twitter. I am thinking of using the Strategy pattern and Factory? Is this correct? What Design Patterns should I consider to implement this?