Questions tagged [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.

Filter by
Sorted by
Tagged with
0 投票
1 回答
2266 浏览

C#:单例模式和静态模式的区别

可能重复:
静态类和单例模式之间的区别?

我正在考虑 C# 上的静态类和单例模式之间的选择。

你知道静态类是如何创建的吗?特别是,我会知道静态类在程序执行期间是否是唯一的,以及单例模式的优缺点。

先感谢您。

0 投票
1 回答
667 浏览

Scala 的单例对序列化有哪些保证?

默认情况下是否安全,如 Java 的单元素枚举模式,或者是否有必要在readResolve某处定义或类似方法以防止单例合约的意外或恶意破坏?

0 投票
5 回答
907 浏览

使用单例模式的电子邮件

我的服务器上运行了一个 webapp,它会更新一些余额余额更新后,我需要检查余额是否低于 5000。如果余额低于 5000,我应该发送电子邮件警报。这里要注意的是,我每天只需要发送一次警报,每次余额低于 5000 时警报不应该一直持续。我相信我应该使用单例模式发送邮件,但我不是确定如何使用它。看到余额的程序低于 5000,应该调用具有发送电子邮件警报功能的单例类,但是如何确保当余额下降时程序不会再次调用该函数?有人可以指导我吗?

0 投票
3 回答
2115 浏览

在进行 OOP 状态机设计时如何避免单例?

我正在尝试自学编程。我以与大多数人相同的方式开始;制作小而杂乱的应用程序和游戏,以不那么简单的方式做简单的事情。最近,我一直在尝试通过编写一个稍微复杂一些的游戏来迈出下一步,该游戏使用 OOP 设计来编写更好、更模块化的代码!

我遇到的主要问题是我的主要 StateManager (FSM) 类的设计(在介绍/菜单/游戏/等屏幕状态之间切换)。高高在上,我只见过两种设计方法:

  • 使用 switch/case 语句 + 枚举在状态之间切换..

  • 制作一个单例 FSM 类来处理向/从向量推送/弹出状态。

现在,我的问题是,switch case 语句非常重复且笨拙,这与我使用这个项目来自学 OOP 的目标背道而驰。

我的第二个也是更大的问题是“单身”建议。

正如我之前所说,我正在努力自学,在编程方面我还有很多东西要学,尤其是在 OOP 和设计模式等领域。我遇到了一个问题,对于我发现的每一个“单例都是邪恶的”线程和讨论,我发现人们在他们的代码中使用单例来制作“引擎”类和 FSM 的教程和参考资料一样多。这是一个非常一致的混合信息。

我想我只是不明白为什么......即使你只想/打算拥有一个类的单个对象,为什么有必要/有益于将构造函数设为私有并创建一个单例?我读过很多关于单例有多糟糕,它们本质上是如何全局的,它们是如何阻碍多线程的,以及有多少程序员认为它们被过度使用或只是简单的糟糕设计......但我看到一个又一个例子使用它们的人,很少有反例显示替代方法。

普通班就不能做同样的事情吗?明确限制创建实例的目的是什么?我只听说过关于单例的负面消息,但人们似乎经常使用它们……我是否完全错过了单例和 OOP 的一些内容?

单例的使用只是一种趋势,还是人们称单例为“邪恶”的一种趋势?我该如何解决这个问题..?开关/外壳 FSM 和单例 FSM 之间没有什么东西吗?有人不能以完全相同的方式设计他们的程序的状态系统而不使他们的任何类成为单例吗?那会改变什么吗?[困惑]

0 投票
2 回答
3394 浏览

Glassfish 初始化 Singleton bean 两次

我有一个被初始化两次的单例 ejb。我不知道为什么,据我所知,它完全捍卫了拥有一个单例 bean 的观点。任何帮助将不胜感激。正如你所看到的,我试图放入一个静态布尔值来防止多次初始化(不是应该需要它),但它没有任何区别。

豆:

日志输出片段:

它是在创造 2 个豆子吗?还是两次部署应用程序?

顺便说一句,我正在使用 glassfish v3,这足够成熟吗?我应该使用 v2 还是其他?想法?

0 投票
2 回答
790 浏览

代码执行在使用线程安全的 Singleton 初始化代码时停止

为了利用全局变量和方法,我将 Singleton 实现为一种健康的编码实践。在实施之前,我关注了 Apple 文档john wordsworth 博客。首先,我没有使我的单例线程安全,我实现了这个方法以及博客和 Apple 文档中提到的所有其他方法。

之后,为了使单例线程安全,我对+ (SingletonClass *)sharedManager类进行了这样的更改,并且我的应用程序停止启动。我设置了断点并观察到dispatch_once被调用两次,然后代码停止进一步执行。

如果我删除这个线程安全的代码片段并恢复到以前的代码,它工作正常并且代码被执行。

请注意,我也在这里查看了 bbum 的答案,他在提问之前提到了可能的僵局情况,但我无法弄清楚这个问题。任何解释或解决方案都会对我有所帮助。谢谢。

编辑1:

如果有人想查看完整的代码,我已经为此创建了要点。请跟随那里。谢谢。

0 投票
4 回答
7448 浏览

Objective-C 单例应该如何实现 init 方法?

我在 Obj-C 中阅读了一些关于单例的惊人资源:

  1. 所以问题:你的 Objective-C 单例是什么样的?
  2. 周五问答:单身人士的照顾和喂养
  3. Apple 文档:创建单例实例

但是这些资源都没有明确地init解决方法概念,虽然我仍然是 Obj-C 的新手,但我很困惑我应该如何实现它。

到目前为止,我知道init在 Obj-C 中拥有私有是不可能的,因为它不提供真正的私有方法......所以用户可以调用[[MyClass alloc] init]而不是使用 my [MyClass sharedInstance].

我还有哪些其他选择?我相信我还应该处理我的单例的子类化场景。

0 投票
5 回答
1028 浏览

单例混合 C++

摘要:如何在 C++ 中创建单例 mixin?我试图避免复制相同的get_instance()函数、私有构造函数等。但我想不出一种方法来使它成为 mixin,因为静态实例将由从 mixin 继承的所有东西共享。

使每个派生类成为单例很容易,但是有没有办法在不重复代码的情况下做到这一点?非常感谢您的帮助,我很难过。

代码: 我正在编写一个带有Registry类的程序,用于按名称查找对象。

我的Registry班级是单身人士;它必须是一个单例(这样注册的对象就不会消失)。

输出:

1
2
3
4

期望的输出:

1
2
3
1

0 投票
1 回答
143 浏览

实习非线程安全的字符串变体和静态初始化器

我正在写一个翻译器,并且有很多翻译器使用的 java 字符串文字。我有自己的非阻塞线程安全标记器,它比 java.util.regex.Matcher 用于硬任务更快,并且与 Matcher 类不同,它是不可变的,因此我的标记器/匹配器可以像不可变的最终类一样在多个线程之间共享正在做翻译。

matcher 类需要一个专门的 stringlike 类,它类似于 CharSequence,但针对我的标记器进行了调整。我的序列/字符串变量的一个子类是由 java.lang.String 构造的,它是不可变的,因此我的一个由多个线程共享的翻译器单例具有一个将 String 映射到 MyString 的内部哈希图。我想实习我的不可变标记器中使用的不可变字符串变体,因为许多文字是相同的。

所以我有一个实习哈希图,但不幸的是它被其他几个类的静态初始化程序添加到了,因此这听起来像是一个不是线程安全的映射。我怎样才能增量地构建这个实习地图而不使 get from it 阻塞?我也不想使用非阻塞并发哈希图。目标,只是一个普通的HashMap。

安迪

0 投票
2 回答
634 浏览

C#中的单例

我想收集更多变体来创建单例类。您能否根据您的意见向我提供 C# 中最好的创建方式。

谢谢。


15 30 50 per page
1
2 3 4 5
1498226