0

可能重复:
单例:应该如何使用

继 Ewan Makepeace 之前关于单例模式的出色问题之后,我想我会问“社区何时认为使用单例是合适的?”

让我举一个例子来批评:

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

这些图标可以在我的整个 UI 中使用(选项卡、表格、框架等)......因此通过静态 Singleton 方法访问它们非常方便。我还想确保只读取一次图标(如果每次我需要从磁盘读取它们会很慢)社区是否认为这是对单例的适当使用?如果没有,它还能如何实施?

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

4

4 回答 4

2

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

于 2008-09-26T07:26:19.293 回答
1

您的 IconManager 实现了工厂模式,它构建图标。而且您可能只需要一个工厂来构建图标。所以这种情况下使用单例恕我直言没有问题。我已经使用其中几个集中式工厂构建了软件,并且一切正常。

另请参阅此线程:最常见的滥用单例类示例

于 2008-09-26T07:29:31.173 回答
0

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

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

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

于 2008-09-26T09:05:02.567 回答
-1

我实际上从未使用过单例,但没有太多使用设计模式。我认为当其他模式(如工厂模式和网关模式)需要它们时,它们非常有价值。然而,他们几乎从来都不是靠自己的好。

您可能需要考虑单态模式,它为您提供了单例的所有优点,而没有很多缺点。这还允许您拥有一个富对象,该对象具有恰好具有您正在寻找的全局属性的状态。

于 2008-09-26T07:33:52.973 回答