3

役割に基づいてメッセージ送信機能を実装する必要があります。

  • 役割 A: メッセージは電子メールと SMS で送信する必要があります
  • 役割 B: メッセージはメールのみで送信する必要があります
  • 役割 C: メッセージは SMS のみで送信する必要があります
  • 役割D:メッセージはTwitterから送信する必要があります

どの役割がどのメッセージ送信機能を使用できるかに関する変更に対応する必要があります。たとえば、役割 B​​ を変更して SMS も含めることができるようにする必要があります。いずれのロールも、メッセージ送信機能を必要とする場合があります。

メソッドSendMessageを持つ1つのInterface IMessageChannelを持つことを検討しました。次に、そのインターフェースを実装する 3 つのクラス (Email、SMS、Twitter など)。Strategy パターンと Factory を使用することを考えていますか? これは正しいです?

これを実装するには、どのような設計パターンを検討する必要がありますか?

4

2 に答える 2

6
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();
   }
}
于 2013-07-21T06:12:19.387 に答える