Questions tagged «singleton»

一种设计模式,可确保确实存在特定类的一个应用程序范围的实例。四人制的创新设计模式之一。

16
GOF Singleton模式是否有可行的替代方案?
面对现实吧。Singleton模式是高度争议与成群程序员话题都围栏边。有些人觉得Singleton只是荣耀的全局变量,而其他人则按模式发誓并不断使用它。但是,我不想让“ 单例论战 ”成为我问题的核心。 每个人都可以进行拔河比赛并与之抗衡,看看谁在我所关心的范围内获胜。我要说的是,我不相信有一个正确的答案,而且我并不是故意在煽动党派争吵。当我问这个问题时,我只是对单例替代方案感兴趣: 它们是GOF单例模式的任何特定替代方案吗? 例如,过去很多次使用单例模式时,我只是对保留一个或几个变量的状态/值感兴趣。但是,可以在类的每个实例之间使用静态变量而不是使用单例模式来保留变量的状态/值。 您还有什么其他想法? 编辑: 我真的不希望这是关于“如何正确使用单例”的另一篇文章。同样,我正在寻找避免这种情况的方法。好玩吗 我想我是在用最好的电影预告片声音问一个纯粹的学术问题:“在没有单例的平行宇宙中,我们能做什么?”

8
AngularJS中的非单一服务
AngularJS在其文档中明确指出“服务是单例”: AngularJS services are singletons 违反直觉,module.factory也返回Singleton实例。 鉴于非单例服务有很多用例,实现工厂方法以返回Service实例的最佳方法是什么,以便每次ExampleService声明依赖项时,它的另一个实例都可以满足ExampleService?

11
Spring容器中的Singleton设计模式与Singleton bean
众所周知,默认情况下,我们在Spring容器中将bean作为单例,如果我们有一个基于Spring框架的Web应用程序,那么在这种情况下,我们真的需要实现Singleton设计模式来保存全局数据,而不仅仅是通过spring创建bean 。 如果我无法解释我实际上要问的问题,请忍受。

4
在Swift 3中具有属性的Singleton
在苹果公司的《将Swift与Cocoa和Objective-C结合使用》(针对Swift 3更新)中,他们给出了Singleton模式的以下示例: class Singleton { static let sharedInstance: Singleton = { let instance = Singleton() // setup code return instance }() } 让我们想象一下,这个单例需要管理一个可变的String数组。我将如何/在何处声明该属性,并确保将其正确初始化为空[String]数组?
88 singleton  swift3 

4
在Java中将枚举用作单例的最佳方法是什么?
在SO问题上编写的内容基础上构建Java最佳单例实现-即关于使用枚举创建单例-之间的区别/优点/缺点(省略构造函数) public enum Elvis { INSTANCE; private int age; public int getAge() { return age; } } 然后打电话 Elvis.INSTANCE.getAge() 和 public enum Elvis { INSTANCE; private int age; public static int getAge() { return INSTANCE.age; } } 然后打电话 Elvis.getAge()
85 java  singleton 

5
Ruby中的单例类到底是什么?
Ruby中的单例类本身就是类吗?这是所有对象都属于“类”的原因吗?这个概念很模糊,但是我认为它与为什么我可以完全定义类方法有关(class foo; def foo.bar ...)。 Ruby中的单例类是什么?
85 ruby  oop  singleton 

8
.NET中双重检查锁定中对volatile修饰符的需求
多篇文章说,在.NET中实施双重检查锁定时,您要锁定的字段应应用volatile修饰符。但是为什么呢?考虑以下示例: public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } …
85 c#  singleton  volatile 

9
全局还是单例用于数据库连接?
在PHP中使用单例而不是全局的数据库连接有什么好处?我觉得使用单例而不是全局会使代码不必要地变得复杂。 全局编码 $conn = new PDO(...); function getSomething() { global $conn; . . . } 用Singleton编码 class DB_Instance { private static $db; public static function getDBO() { if (!self::$db) self::$db = new PDO(...); return self::$db; } } function getSomething() { $conn = DB_Instance::getDBO(); . . . } 如果除了全局或单例之外,还有一种更好的初始化数据库连接的方法,请提及它并说明它比全局或单例具有的优势。

6
为什么Borg模式比Python中的Singleton模式更好
为什么Borg模式比Singleton模式更好? 我问是因为我看不到它们会导致任何不同。 博格: class Borg: __shared_state = {} # init internal state variables here __register = {} def __init__(self): self.__dict__ = self.__shared_state if not self.__register: self._init_default_register() 单身人士: class Singleton: def __init__(self): # init internal state variables here self.__register = {} self._init_default_register() # singleton mechanics external to class, for example this …
80 python  singleton 

8
将记录器作为单例是一个好习惯吗?
我习惯将记录器传递给构造函数,例如: public class OrderService : IOrderService { public OrderService(ILogger logger) { } } 但这很烦人,因此我已经将它用作属性一段时间了: private ILogger logger = NullLogger.Instance; public ILogger Logger { get { return logger; } set { logger = value; } } 这也很烦人-它并不干燥,我需要在每节课中重复。我可以使用基类,但是再说一次-我使用的是Form类,因此需要FormBase等。所以我认为,暴露ILogger的单例将带来什么负面影响,所以一个人就会知道在哪里获取记录器: Infrastructure.Logger.Info("blabla"); 更新:正如Merlyn正确注意到的那样,我应该提到,在第一和第二个示例中,我正在使用DI。


7
C#中是否有“空列表”单例?
在C#中,我使用了LINQ和IEnumerable。一切都很好(或至少在大多数情况下是如此)。 但是,在许多情况下,我发现自己需要IEnumerable<X>默认为空。也就是说,我想 for (var x in xs) { ... } 无需空检查即可工作。现在,这是我目前正在执行的操作,具体取决于更大的上下文: var xs = f() ?? new X[0]; // when xs is assigned, sometimes for (var x in xs ?? new X[0]) { ... } // inline, sometimes 现在,虽然上面的内容对我来说非常好-也就是说,如果创建数组对象有任何“额外开销”,我只是不在乎-我想知道: C#/。NET中是否存在“空不变的IEnumerable / IList”单例?(并且即使没有,还有一种“更好”的方式来处理上述情况吗?) Java具有Collections.EMPTY_LIST不可变的单例(即“井井有条”),Collections.emptyList<T>()它可以达到此目的,尽管我不确定类似的概念是否甚至可以在C#中使用,因为泛型的处理方式不同。 谢谢。

10
线程安全C#单例模式
我对此处记录的单例模式有一些疑问:http : //msdn.microsoft.com/en-us/library/ff650316.aspx 以下代码摘自该文章: using System; public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } …

7
为什么在双重检查锁定中使用了volatile
在Head First设计模式手册中,具有双重检查锁定的单例模式已实现如下: public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 我不明白为什么volatile要使用它。volatile使用不会 违反使用双重检查锁定(即性能)的目的吗?

2
对SQLiteDatabase使用Singleton设计模式
我是Android上的新手,并且我正在开发一个简单的应用程序,以获得一些基本的经验。我的应用程序非常简单,包括广播接收器和一些活动。这两个组件都使用单个数据库,因此从理论上讲,这两个组件都可能尝试同时访问数据库。 目前,我只是在每次需要时实例化db对象(这是一个SQLite db helper类),并执行所需的操作:查询,插入等。 从我在这里和其他一些文档中已读过的内容来看,如果并发访问数据库,则会遇到“数据库锁定”异常的问题,因此更好的方法是使用该数据库对象的单个实例,以便所有组件始终使用相同的数据库连接。 以上推理正确吗?那么单身人士将是一个很好的解决方案吗?我知道有些纯粹主义者可能会反对它,但是请注意,这是一个相当简单的应用程序,因此我可以负担其他情况下无法做到的事情。 否则,更好的选择是什么?我已经读过有关使用内容提供程序的信息,但是这样做除了我不想与其他活动共享数据外,对它来说已经太多了。我确实已经阅读了这篇文章,并发现它很有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.