Singleton Class Vs序列化对象,CSharp

时间:2010-07-14 21:47:06

标签: design-patterns

我正在构建一个工具。我有一个Collection Class,用于存储从网络上的文件收集的数据。 (为什么?因为从网络文件中读取比一次读取所有数据并将数据存储到对象中更耗时) 我需要在各种不同的类中使用相同的实例。
我查看了Singleton Classes的pro和con,并决定使用它,因为我觉得传递Collection类的序列化对象并不是一个好主意。

这是一种很好的编程技巧吗?还是有更好的解决方案。如果我不清楚,我可以提供更多细节

谢谢,
- Ivar
P.S:我不确定是否已经问过这个问题,如果是的话请指导我到正确的帖子。

3 个答案:

答案 0 :(得分:3)

这取决于你的单身人士做什么。我假设我们的单例由于某种原因收集文件,然后对它们执行某种聚合。如果是这样的话,单身人士应该是个好主意。

如果您使用单例作为缓存,那么假设单例对象是负责维护缓存的对象,这也是有意义的。由于我不了解您的平台,我不能告诉您使用特定的缓存管理器......

话虽这么说,单身人士往往是一个过度使用的编程结构,你应该对他们有点警惕。在决定是否使用套件时,请问自己单身人士是否管理某种类型的受限资源。这通常是我发现自己使用它们的唯一原因。

几乎不可能告诉你我的设计是有意义的,但是,我不知道数据会发生什么以及它应该如何发生。

答案 1 :(得分:1)

Singleton并不是一个糟糕的模式,当它是所需的行为。但是,您不应该在类本身中实现Singleton。

相反,使用像Inversion of Control这样的Guice框架。然后,您班级的消费者可以确定其生命周期(无论是否是单身)。

答案 2 :(得分:0)

我认为构建Singleton类是一个很好的选择,这样所有其他类将共享同一个实例,您将避免重复,并且需要传递收集的数据。

我有两个问题要问你:

  1. 你知道你的班级有多大/多重 可能成为?因为它会收集 数据,它可能变得非常沉重。

  2. 当应用程序关闭时,将会 你需要坚持收集 数据转换成DB或某种 缓存?