我有以下情况:
我有一个 QueueReader 类,它将从队列中读取消息。我还有一些发件人,例如 EmailSender 和 SMSSender,它们将分别使用电子邮件或 SMS 将这些消息发送给客户端。将来可以添加更多发件人。
我可以想到两种方法,但我不确定哪种方法更有益。
工厂模式:
我可以有一个 SenderManager,它将使用 SenderFactory 创建适当的发件人,然后调用它的 Send() 方法。
因此 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 实现一个事件。然后让我所有的发件人订阅这个事件。发件人将有权访问上面工厂中的信息,以了解该消息是否是给他们的。
这样做的好处是任何新的发件人都只需订阅该事件。
现在我已经把所有这些都写下来了,我认为观察者模式是更简洁的方法......
但是,如果有人有任何见解或建议,请分享。
谢谢!