次のシナリオがあります。
キューからメッセージを読み取る QueueReader クラスがあります。また、EmailSender や SMSSender などの送信者もいくつかあり、これらのメッセージは、それぞれ電子メールまたは SMS を使用してクライアントに送信されます。将来的には、さらに多くの送信者が追加される可能性があります。
これを行うには 2 つの方法が考えられますが、どちらがより有益かはわかりません。
工場パターン:
SenderFactory を使用して適切な送信者を作成し、その Send() メソッドを呼び出す SenderManager を作成できます。
したがって、メッセージを読み取るときに QueueReader は、次のことを行う SenderManager の Send() を呼び出します。
IMySender sender = SenderFactory.CreateSender()
sender.Send()
//I have the information to create the proper Dispatcher in the
//factory based upon the message but I have omitted it for brevity.
したがって、新しい送信者を追加する必要がある場合でも、QueueReader または SenderManager を変更する必要はありません。新しい Sender を追加し、SenderFactory を変更します。
オブザーバー パターン 上記とは対照的に、QueueReader クラスに NewMessage のイベントを実装させることができます。次に、すべての送信者にこのイベントをサブスクライブさせます。送信者は、上記のファクトリーにあった情報にアクセスして、メッセージが自分宛てのものかどうかを知ることができます。
これの利点は、新しい Sender がイベントをサブスクライブするだけで済むことです。
これをすべて書き留めたので、オブザーバーパターンがよりクリーンなアプローチだと思います...
ただし、誰かが洞察や提案を持っている場合は、共有してください。
ありがとう!