问题标签 [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 投票
3 回答
17876 浏览

iphone - Objective-C 中的单例共享数据源

嘿伙计们 - 我正在编写一个非常简单的 iPhone 应用程序。数据来自一个 plist 文件(基本上是 NSDictionary),我试图将它加载到一个单例类中,并在我的各种视图控制器中使用它来访问数据。

这是我的单例的实现(在这个线程之后大量建模)

因此,每当我尝试访问应用程序中其他地方的 searchDict 或 searchArray 属性(如 TableView 委托)时,如下所示:

我收到一个异常说明 *** -[NSCFSet objectAtIndex:]: unrecognized selector sent to instance 0x5551f0

我不太确定为什么将 objectAtIndex 消息发送到 NSCFSet 对象,我觉得我的单例实现错误或其他什么。我还尝试了一种更复杂的单例实现,就像苹果在上述线程中推荐的那样,并且遇到了同样的问题。感谢您提供的任何见解。

0 投票
4 回答
713 浏览

php - 管理单身人士的最佳方式是什么?

我在搞乱不同的 PHP 日志框架。我目前正在尝试 PEAR::Log。我想我会使用它的singleton功能来确保只有一个类的实例。

我有一个类似守护进程的小脚本,我想添加日志记录,因为它可能是系统中要测试的最简单的脚本。这个脚本有几个功能。我可能想在函数中记录一些东西。

我的问题是如何最好地管理这个单例?

对我来说:

在每个函数中似乎并不理想,特别是因为我已经在初始调用中指定了所有选项。Pear::Log 序列化此信息,但从看起来您仍然必须提供所有这些变量来获取实例。

另一种选择是将实例传递给每个函数。再次,似乎它不太理想。

我想您也可以将实例设为“全局”。

在这种情况下你怎么办?有更好的解决方案吗?

0 投票
9 回答
20081 浏览

singleton - 好吧,全局变量被谴责,单身被鄙视,还有什么办法?

对于桌面应用程序。这只是一个一般性问题,可能只需要一般性答案。

0 投票
6 回答
16753 浏览

configuration - 用于应用程序配置的单例

到目前为止,在我的所有项目中,我都使用单例模式来访问整个应用程序中的应用程序配置。最近我看到很多关于不使用单例模式的文章,因为这种模式不提高可测试性,而且它隐藏了组件依赖。我的问题是存储应用程序配置的最佳方式是什么,它可以在整个应用程序中轻松访问,而无需在整个应用程序中传递配置对象?

提前致谢

马杜

0 投票
1 回答
748 浏览

xaml - 如何为 WPF 故事板中的静态对象设置动画

我有一个 WPF 程序,我需要添加一个“演示模式”。因为我希望我的设计人员能够修改演示模式,而不必每次都重新编译程序,所以我认为使用来自外部 XAML 文件的情节提要是一个好主意。“演示模式”基本上是一个故事板,为应用程序的一些依赖属性设置动画。

为了公开我的应用程序的 DP,我创建了应用程序类的公共静态成员(单例),以便应用程序的 DP 始终在外部可用。在这种情况下,故事板将访问它们。

在外部 XAML 文件中,我添加了正确引用应用程序的命名空间/程序集的正确 xmlns。所以理论上,我应该能够在 Storyboard 中访问应用程序的 DP。

问题是,当未在 XAML 中声明/命名对象时,我不知道如何在 Storyboard 中为静态对象的 DP 设置动画。声明情节提要动画帧时,情节提要的唯一附加属性是Storyboard.TargetNameStoryboard.TargetProperty

如果有人能给我一个提示,让我朝着正确的方向前进,我将不胜感激。

0 投票
6 回答
21333 浏览

c# - 一个通用的单例

对于普通的单身人士,你们怎么看?

0 投票
8 回答
3113 浏览

c++ - 你如何在单例和无名类之间进行选择?

我会使用这样的单例:

我会使用这样的未命名类:

我觉得单例模式除了具有可读的错误消息外,似乎与未命名的类相比没有任何优势。使用单例比使用未命名的类对象更笨拙:首先,客户端必须首先获取实例的句柄;其次,实现者Singleton::instance()可能需要考虑并发性。

那么为什么以及如何选择单例而不是未命名的类呢?

作为附录,尽管未命名类的明显定义可能是

我也可以这样定义:

后一种方法具有可读的编译器错误消息的优点,但在调试模式下不是单例。

0 投票
13 回答
18835 浏览

ruby-on-rails - 如何实现单例模型

我在 Rails 中有一个站点,并希望有站点范围的设置。如果发生特定事件,我的应用程序的一部分可以通过 SMS 通知管理员。这是我希望通过站点范围的设置进行配置的功能示例。

所以我想我应该有一个设置模型或其他东西。它需要是一个模型,因为我希望能够 has_many :contacts 用于 SMS 通知。

问题是设置模型的数据库中只能有一篇文章。所以我正在考虑使用单例模型,但这只会阻止创建新对象吗?

我是否仍然需要为每个属性创建 getter 和 setter 方法,如下所示:

直接使用 Model.attribute 但总是创建它的一个实例并使用它可能不是最佳实践吗?

我应该在这里做什么?

0 投票
6 回答
2879 浏览

design-patterns - “代理定义集”设计模式——以另一个名字闻名?

在我参与多年的一个项目中,我逐渐形成了一种被证明对我非常有用的设计模式。有时我觉得我应该对它有点福音,但如果我尝试并发现它只是我对某人旧帽子的版本,我会有点尴尬。我翻遍了设计模式来寻找它是徒劳的,我还没有遇到其他人谈论它,但我的搜索并不详尽。

核心思想是拥有一个管理一组定义对象的代理对象,每个定义对象构成一些复杂属性的可能值。例如,您可能有 Car、Plane 和 Generator 类都具有 EngineType。Car 不存储自己的 EngineType 对象,它存储了某种类型的引用键,用于说明它拥有的引擎类型(例如整数或字符串 ID)。当我们想查看 EngineType 的属性或行为时,比如 WankelEngine,我们向 EngineTypeBroker 单例对象询问 WankelEngine 的定义对象,并将引用键传递给它。该对象封装了有关 EngineTypes 的所有有趣信息,可能只是一个属性列表,但也可能将行为加载到它上面。

所以它促进的是一种共享的、松散耦合的聚合,其中许多汽车可能有一个 WankelEngine 但只有一个 WankelEngine 定义对象(并且 EngineTypeBroker 可以替换该对象,利用松散耦合增强运行时态射)。

我使用该模式的一些元素(继续以 EngineType 为例):

  1. 始终存在 IsEngineType(x) 和 EngineType(x) 函数,分别用于确定给定值是否是 EngineType 的有效引用键和检索与引用键对应的 EngineType 定义对象。
  2. 对于给定的 EngineType,我总是允许多种形式的引用键,总是至少是一个字符串名称和定义对象本身,通常不是整数 ID,有时是聚合 EngineType 的对象类型。这有助于调试,使代码更灵活,并且在我的特定情况下,相对于旧实践,可以缓解许多向后兼容性问题。(在这个项目的上下文中,人们过去做这一切的常用方法是为 EngineType 可能具有的每个属性定义哈希,并通过引用键查找属性。)
  3. 通常,每个定义实例都是该定义类型的通用类的子类(即 WankelEngine 继承 EngineType)。定义对象的类文件保存在类似/Def/EngineType 的目录中(即WankelEngine 的类将是/Def/EngineType/WankelEngine)。因此相关的定义被组合在一起,类文件类似于 EngineType 的配置文件,但具有定义代码的能力(通常不会在配置文件中找到)。

一些简单的示例伪代码:

那么,有这个名字吗?

0 投票
10 回答
4928 浏览

unit-testing - 不可测试代码的警告标志

无法测试的代码真的让我很恼火。以下情况使 oo-code 无法测试:

  • 全局状态,例如单例设计模式
  • 做一些花哨的工作的静态方法,例如数据库访问
  • 深层继承树
  • 在构造函数中工作,例如控制语句
  • 违反单一职责原则的类

是否有更多警告信号?