社区何时认为适合使用Singleton?

问题描述:

可能重复:
Singleton: How should it be used社区何时认为适合使用Singleton?

从伊万麦思平的出色提早了Singleton模式的问题之后,我想我会问“什么时候该社区认为这是适当的使用Singleton?“

让我提供了一个例子来批评:

我有一个“IconManager”单身。它首先读取一个属性文件,它指示我的图标在磁盘上的位置,然后读取所有图标并将其缓存以供将来使用。

这些图标可以在我的用户界面(标签,表格,框架等)中使用......因此通过静态Singleton方法访问它们非常方便。我也想确保这些图标只读一次(如果每次我需要它们时从磁盘读取它们都会很慢)社区是否相信这是一个适当的单例使用?如果不是,那么它还可能被实施了多少?

单身人士可能还有其他什么有效的用途?

+0

http://*.com/questions/86582/singleton-how-should-it-be-used – 2008-09-26 07:26:01

+0

对不起,任何重复。 – cagcowboy 2008-09-26 07:28:45

您的IconManager实现了工厂模式,它构建了图标。你可能只需要一个工厂来构建图标。所以这种情况下使用单身恕我直言,没有问题。我已经建立了几个这些集中式工厂的软件,一切都很好。

也看到这个线程:Most common examples of misuse of singleton class

另一种方法是创建一个加载图标的类的实例,然后将对此实例的引用传递给需要访问资源的每个控件。这样在将来你可以有多个图标加载器并根据需要传递它们。对于未来而言更灵活,但是让您将参考转移到数十万个控件上会带来相当大的负面影响。

其实我也从来没有使用过单,但没有使用设计模式了。我认为当其他模式像工厂和网关模式一样需要它们时,它们非常有价值。但是,他们几乎从来都不是很好。

您可能想要考虑Monostate Pattern,它为您提供单身人士的所有好处,而没有许多缺点。这也允许你拥有一个拥有你正在寻找的全局属性的状态的丰富对象。

访问可能只有一个活动连接的资源时,很好的使用单例。有许多硬件设备有这个限制。

假设您连接到仅允许一个连接的CCTV camera。 Singleton模式会在首次使用时创建此连接并保持打开状态。无论何时您需要从相机拍摄照片(可能来自多个来源),只要知道其他问题,就可以打到Singleton,照片就可以使用。

如果相机的初始连接时间太慢,以这种方式保持连接打开而不是打开连接,抓取图片并再次关闭连接可能会更有效。