问题标签 [singleton]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
26 回答
184265 浏览

objective-c - 我的 Objective-C 单例应该是什么样的?

我的单例访问器方法通常是以下几种变体:

我能做些什么来改善这一点?

0 投票
2 回答
8369 浏览

c# - 在类库中正确实现缓存以在 asp.net 应用程序中使用

我正在我在 asp.net 应用程序中使用的类库中实现缓存。

我使用静态方法将缓存对象创建为单例模式来更新缓存,该方法实际上只是用我需要缓存的数据集合加载成员变量/属性(当然有一些锁定逻辑)。我认为这是一个不错的方法,因为我可以通过调用来访问我的数据

我正在创建一个新的缓存对象来存储由某个键分区的大量数据。我要说的是我正在创建一个新的缓存,但是这个缓存不会一次加载所有数据,而是为每个访问的键存储一个集合。

这次提出了关于垃圾收集的问题。由于我正在存储大量数据,如果它突然被 gc'ed 会不会是一种浪费?由于它只是一个单例模式,因此无法确保数据保留在缓存中。

所以我的问题是 - 实现缓存来处理这种情况的最佳做法是什么?我真的不喜欢一个非常复杂的解决方案,而且我知道 System.Web 中有缓存,但这似乎有点“离题”,因为这只是一个类库,或者你怎么看?

0 投票
16 回答
23280 浏览

design-patterns - GOF 单例模式是否有任何可行的替代方案?

面对现实吧。单例模式是一个备受争议的话题,在围墙的两边都有成群的程序员。有些人觉得 Singleton 只不过是一个美化的全局变量,而另一些人则对模式发誓并不断地使用它。但是,我不希望Singleton Controversy成为我问题的核心。 每个人都可以进行一场拔河比赛,然后一决胜负,看看谁会赢。我想说的是,我不相信有一个正确的答案,我也不是故意煽动党派争吵。当我问这个问题时,我只是对单例替代品感兴趣:

他们是 GOF 单例模式的任何特定替代方案吗?

例如,当我过去多次使用单例模式时,我只是对保留一个或多个变量的状态/值感兴趣。但是,可以使用静态变量而不是使用单例模式在类的每个实例化之间保留变量的状态/值。

你还有什么别的想法?

编辑: 我真的不希望这是另一篇关于“如何正确使用单例”的帖子。同样,我正在寻找避免它的方法。为了好玩,好吗?我想我用你最好的电影预告片声音问了一个纯粹的学术问题,“在没有单身的平行宇宙中,我们能做什么?”

0 投票
9 回答
18222 浏览

c++ - 如何在 Windows 中创建线程安全的单例模式?

我一直在这里阅读有关线程安全的单例模式:

http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B_.28using_pthreads.29

它在底部说,唯一安全的方法是使用 pthread_once - 这在 Windows 上不可用。

这是保证线程安全初始化的唯一方法吗?

我在 SO 上读过这个帖子:

C++ 中单例的线程安全惰性构造

并且似乎暗示了原子操作系统级别的交换和比较功能,我假设在 Windows 上是:

http://msdn.microsoft.com/en-us/library/ms683568.aspx

这可以做我想要的吗?

编辑:我想要延迟初始化,并且只有一个类的实例。

另一个站点上的某个人提到在命名空间内使用全局变量(他将单例描述为反模式) - 它怎么可能是“反模式”?

接受的答案:
当我使用 Visual Studio 2008 时,我 接受了Josh 的回答- 注意:对于未来的读者,如果您不使用此编译器(或 2005) - 不要使用接受的答案!

编辑: 代码工作正常,除了 return 语句 - 我收到一个错误:错误 C2440:'return':无法从'volatile Singleton *'转换为'Singleton *'。我是否应该将返回值修改为 volatile Singleton *?

编辑:显然 const_cast<> 将删除 volatile 限定符。再次感谢乔希。

0 投票
3 回答
2502 浏览

prototype - DAO 通常应该具有哪个范围

道不会拥有任何状态,这是毫无疑问的。

但是,为了最容易地访问该类,使用原型(=每次都新建)还是单例更好?

简单的对象创建对于 dao 来说很便宜。它通常只拥有一个 sessionfactory,从单例列表中访问对象可能同样昂贵。

澄清:这个问题的重点是,如果对 daos 的范围界定有一个共同的约定。

0 投票
22 回答
201216 浏览

php - Creating the Singleton design pattern in PHP5

How would one create a Singleton class using PHP5 classes?

0 投票
2 回答
5884 浏览

c# - 在单例对象上使用反射调用方法

所以我有以下内容:

使用反射如何调用 DoSomething 方法?

我问的原因是因为我将方法名称存储在 XML 中并动态创建 UI。例如,我正在动态创建一个按钮,并告诉它在单击按钮时通过反射调用什么方法。在某些情况下,它会是 DoSomething,或者在其他情况下,它会是 DoSomethingElse。

0 投票
5 回答
41825 浏览

ruby - ruby 中的单例类到底是什么?

Ruby 中的单例类本身就是一个类吗?这就是所有对象都属于“类”的原因吗?这个概念是模糊的,但我相信这与我为什么可以定义一个类方法有关(class foo; def foo.bar ...)。

Ruby 中的单例类是什么?

0 投票
2 回答
1957 浏览

.net - 这些为单例创建静态实例的方式有什么区别?

我最近遇到了一个错误,该错误仅在将库构建为发布版本而不是调试版本时才表现出来。该库是一个带有 COM 包装器的 .NET dll,我正在使用 CoCreateInstance 从非托管 c++ 应用程序中的 dll 创建一个类。当我最终追踪到这个错误时,它是由访问一个单例对象引起的。我有这样声明的单例实例:

然后通过以下方式访问它:

这是失败的。将其更改为:

解决了这个问题。任何想法为什么最初的使用不起作用,以及这样做是否有任何缺点?

发布 dll 似乎完全可以从另一个托管应用程序中使用。

0 投票
8 回答
15952 浏览

c# - C# 中的一次性单例

我有一个使用“静态只读 T Instance = new T();”的单例 图案。但是,我遇到了 T 是一次性的,实际上需要为单元测试而被丢弃的情况。如何修改此模式以支持一次性单例?

我想要的界面是这样的:

注意 - 当然,模式必须是线程安全的。

编辑- 出于生产代码的目的,这是一个真正的单例。问题是它锁定了一些文件,因此为了在单元测试中进行清理,我们必须处理它。

如果可能的话,我也更喜欢可以重复使用的模式。