Events 单例网络事件处理器可以吗?

Events 单例网络事件处理器可以吗?,events,network-programming,singleton,Events,Network Programming,Singleton,假设您在网络的另一端有一个系统,它将需要缓存的事件和数据发送到某个中间代理 我没有给应用程序中需要通知此类事件的每个组件一个新的代理订阅,而是考虑性能和简单性(处理代理订阅的第三方库并不漂亮)我应该只有一个事件处理器订阅代理,并在接收到组件提供的订阅侦听器时以编程方式触发事件。缓存数据也可以从此单例共享。这将大大减少网络连接 然而,根据大多数关于单例的讨论,除非出于并发原因或硬件原因,您只需要一个访问点,否则单例总是有害的。这不是我的情况,因为每个组件都可以有自己的订阅和自己的个人数据缓存,因为

假设您在网络的另一端有一个系统,它将需要缓存的事件和数据发送到某个中间代理

我没有给应用程序中需要通知此类事件的每个组件一个新的代理订阅,而是考虑性能和简单性(处理代理订阅的第三方库并不漂亮)我应该只有一个事件处理器订阅代理,并在接收到组件提供的订阅侦听器时以编程方式触发事件。缓存数据也可以从此单例共享。这将大大减少网络连接

然而,根据大多数关于单例的讨论,除非出于并发原因或硬件原因,您只需要一个访问点,否则单例总是有害的。这不是我的情况,因为每个组件都可以有自己的订阅和自己的个人数据缓存,因为所有数据都可以通过代理请求。然而,这可以很容易地再增加200个网络连接


因为单例是邪恶的,这是否意味着200多个连接到一个拥有200份数据拷贝的代理比使用我不需要使用的单例要好?所有这些都会使速度减慢很多,但不会破坏游戏规则,应用程序仍然可用。

在流程中为多个客户机提供服务的代理客户机对象本身并没有什么问题

所有关于单身汉是邪恶的讨论实际上都是关于全局变量是邪恶的。单例变得邪恶是因为它为可变状态提供了一个
静态
访问点,而不是因为它只有一个实例

在这种情况下,您可能希望使用依赖项注入来连接它,而不是调用
Broker.getInstance()
。这避免了客户机代码假设它实际上是一个单例