1

我正在编写一个程序,在许多其他东西中,我需要三个类,我们可以在这里称之为 writer、storage 和 reader。

Writer 需要非常频繁地访问存储类,而 Reader 则很少,尤其是与 writer 相比。存储类仅用于存储数据写入器的写入。作者唯一要做的就是经常写入一些短脉冲数据。读取器从存储中读取写入的数据,然后刷新存储以释放一些空间供写入器写入新数据。为了给出访问频率的一些数字和概念,假设作者在每分钟内多次访问存储,而读者大约每小时访问一次。

所以问题是我需要在存储类中使用单例模式还是将其声明为静态类就足够了?

另外,我如何确保读取器类在使用存储时,它会在读取并从存储中刷新数据后立即释放存储资源?大多数情况下,存储类应该可供写入者在其中写入数据。

单例方法看起来不错,尤其是我不是 OOP 背景。我听说这很糟糕。

4

3 回答 3

2

与这些问题一样,我认为没有一个正确的答案。

首先,这个问题已经有了很好的答案

单例模式的典型实现依赖于包含该类的唯一实例的静态字段。我根本不喜欢这种方法,因为静态字段本质上是一个具有所有缺点的全局变量(例如隐藏的依赖关系和增加耦合的风险,不利于可测试性)。

但是,从某种意义上说,在您的应用程序中只需要一个类的单个实例,更一般的单例概念在您描述的场景中可能是一个好主意。但是,我不会通过静态变量神奇地访问它,而是将它传递给使用它的类的构造函数。这样,类之间的依赖关系是显而易见的,它将简化测试(例如,如果你想注入一个模拟而不是真正的类)。有关构造函数注入的更多好处,请参见此处。

于 2012-04-12T07:17:30.177 回答
0

我需要在存储类中使用单例模式还是将其声明为静态类就足够了?

这些都是不相关的问题。
单例是关于你应该拥有多少个类的实例。
使用单例,您只在程序中强制执行 1 个实例。
如果这是您需要的,请使用单例。
剩下的你应该阅读生产者/消费者模式

于 2012-04-12T07:08:10.683 回答
0

基本上,单例与静态类几乎相同。在相同的情况下,两者都有好坏之分,但单例更“面向对象”。在基于原型的语言中,没有真正的区别。

单身人士的名声很差,因为很多人将它们用作全局变量的替代品(现在每个人都“知道”这是不好的)。以这种方式使用,单例与全局变量一样糟糕。如果它确实模拟了一个您可以证明只有一个实例的对象,请使用单例。如果它甚至在理论上可能在将来有另一个实例,或者如果它没有为特定的东西建模,那么不应该使用单例模式 - 也不应该使用静态类。

这一切都与您的读者/作家问题无关;如评论所示,一种是生产者/消费者模式或观察者模式(取决于您如何实现它)。另一个是基本的面向对象设计问题。

于 2012-04-12T07:14:17.083 回答