继Ewan Makepeace先前关于Singleton模式的优秀问题之后,我想我会问“社区什么时候认为使用Singleton是合适的?”
让我举一个批评的例子:
我有一个“IconManager”单身人士。首先阅读一个属性文件,该文件指示我的图标在磁盘上的位置,然后读取所有图标并将其缓存以备将来使用。
图标可以在我的UI(标签,表格,框架等)中使用...因此通过静态Singleton方法访问它们非常有用。我还想确保图标只读一次(如果每次我需要的话,从磁盘读取它们的速度会非常慢)社区是否认为这是一个单独的使用?如果没有,它还有什么可以实现的呢?
单身人士可能有哪些其他有效用途?
答案 0 :(得分:2)
另一种方法是创建一个类的实例,用于加载图标,然后将对此实例的引用传递给需要访问资源的每个控件。在未来,您可以使用多个图标加载器并根据需要传递它们。对未来更加灵活,但有一个相当大的缺点,就是让你将参考文献传递给大量的控件。
答案 1 :(得分:1)
您的IconManager实现工厂模式,它会构建图标。而且您可能只需要一个工厂来构建图标。因此,使用单身恕我直言的情况没有问题。我用几个这些集中式工厂构建了软件,一切都很顺利。
答案 2 :(得分:0)
在访问可能只有一个活动连接的资源时,单例的使用很好。有许多硬件设备具有此限制。
假设您正在连接只允许一个连接的CCTV camera。 Singleton模式将在首次使用时创建此连接并保持打开状态。每当你需要来自摄像机的图片时,可能来自多个来源,你可以点击Singleton知道,考虑到其他问题,图片将可用。
如果相机初始连接时间较慢,以这种方式打开连接而不是打开连接,抓取图片并再次关闭连接可能会更有效率。
答案 3 :(得分:-1)
我实际上从未使用过单身,但没有多少使用过设计模式。我认为当其他模式需要它们时,它们非常有价值,如Factory和Gateway模式。然而,他们自己几乎从不都很好。
您可能需要考虑Monostate Pattern,它可以为您提供单身人士的所有好处,而不会有许多缺点。这也允许您拥有一个富对象,该对象的状态恰好具有您正在查找的全局属性。