可能重复:
   Singleton:如何使用

继Ewan Makepeace先前关于Singleton模式的优秀问题之后,我想我会问“社区什么时候认为使用Singleton是合适的?”

让我举一个批评的例子:

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

图标可以在我的UI(标签,表格,框架等)中使用...因此通过静态Singleton方法访问它们非常有用。我还想确保图标只读一次(如果每次我需要的话,从磁盘上读取它们的速度会非常慢)社区是否认为这是一个合适的Singleton?如果没有,它还有什么可以实现的呢?

单身人士可能有哪些其他有效用途?

有帮助吗?

解决方案

您的IconManager实现工厂模式,它会构建图标。而且您可能只需要一个工厂来构建图标。因此,使用单身恕我直言的情况没有问题。我用几个这些集中式工厂构建了软件,一切都很顺利。

另请参阅此主题:滥用单身类的最常见示例

其他提示

另一种方法是创建一个类的实例,用于加载图标,然后将对此实例的引用传递给需要访问资源的每个控件。在未来,您可以使用多个图标加载器并根据需要传递它们。对未来更加灵活,但有一个相当大的缺点,就是让你将参考文献传递给数以万计的控件。

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

假设您正在连接闭路电视摄像机,只允许一个连接。 Singleton模式将在首次使用时创建此连接并保持打开状态。每当你需要来自摄像机的图片时,可能来自多个来源,你可以点击Singleton知道,考虑到其他问题,图片将可用。

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

我实际上从未使用过单身,但没有多少使用过设计模式。我认为当其他模式需要它们时,它们非常有价值,如Factory和Gateway模式。然而,他们自己几乎从不都很好。

您可能需要考虑 Monostate Pattern 单身人士的所有好处没有很多缺点。这也允许您拥有一个富对象,该对象的状态恰好具有您正在查找的全局属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top