观察者设计模式 - 多种事件类型

发布于 2024-10-12 08:42:03 字数 487 浏览 2 评论 0原文

我目前正在实现观察者设计模式,并使用它来处理向会话添加项目、创建错误日志并向用户写入消息,提供有关其操作的反馈(例如,您刚刚注销!)。

我开始使用名为 addEvent() 的单一方法,但随着添加更多观察者,我发现详细说明每个侦听器所需的所有信息所需的参数开始增长。

我现在有 3 个方法,分别称为 addMessage()、addStorage() 和 addLog()。这些将数据添加到事件数组中,该数组具有与事件类型(例如日志、消息、存储)相关的键,但我开始觉得现在主题需要了解太多有关附加的侦听器的信息。

我的另一种想法是返回 addEvent() 并传递事件类型(例如 USER_LOGOUT)以及关联的数据,并且每个观察者维护自己正在寻找的事件句柄列表(可能在 switch 语句中),但这感觉麻烦。另外,我需要检查是否已经随事件类型一起传递了足够的数据。

这样做的正确方法是什么?

如果我可以进一步解释其中的任何部分,请告诉我。我希望你能帮助并看到我正在解决的问题。

I'm currently implementing the Observer design pattern and using it to handle adding items to the session, create error logs and write messages out to the user giving feedback on their actions (e.g. You've just logged out!).

I began with a single method on the subject called addEvent() but as I added more Observers I found that the parameters required to detail all the information I needed for each listener began to grow.

I now have 3 methods called addMessage(), addStorage() and addLog(). These add data into an events array that has a key related to the event type (e.g. log, message, storage) but I'm starting to feel that now the subject needs to know too much about the listeners that are attached.

My alternative thought is to go back to addEvent() and pass an event type (e.g. USER_LOGOUT) along with the data associated and each Observer maintains it's own list of event handles it is looking for (possibly in a switch statement), but this feels cumbersome. Also, I'd need to check that sufficient data had also been passed along with the event type.

What is the correct way of doing this?

Please let me know if I can explain any parts of this further. I hope you can help and see the problem I'm battling with.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文