Tag: 单例

C#中有一个“空列表”单例吗?

在C#中我使用LINQ和IEnumerable很好。 一切都很好(或者至less大部分如此)。 但是,在很多情况下,我发现自己需要一个空的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 现在,虽然上述对我来说是完全正确的 – 也就是说,如果创build数组对象有任何“额外的开销”,我只是不在乎 – 我想知道: C#/。NET中是否存在“空不变的IEnumerable / IList”单例? (即使不是,有没有更好的办法来处理上述情况?) Java具有Collections.EMPTY_LIST不可变单例 – 通过Collections.emptyList<T>() “well-typed” – […]

将logging仪作为单件使用是一种好的做法吗?

我有一个习惯将logging器传递给构造函数,如: public class OrderService : IOrderService { public OrderService(ILogger logger) { } } 但是这很烦人,所以我用了一段时间的这个属性: private ILogger logger = NullLogger.Instance; public ILogger Logger { get { return logger; } set { logger = value; } } 这也越来越讨厌 – 这不是干燥的,我需要在每个class都重复这个。 我可以使用基类,但是再次 – 我使用Form类,所以需要FormBase,等等。所以我认为,与ILogger暴露单身人士会有什么缺点,所以很想知道在哪里得到logging器: Infrastructure.Logger.Info("blabla"); 更新:正如Merlyn正确注意到的,我应该提到,在第一个和第二个例子中,我使用DI。

在.NET中双重检查locking需要volatile修饰符

多个文本说,当在.NET中执行双重检查locking时,您locking的字段应该应用挥发性修饰符。 但为什么呢? 考虑下面的例子: 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; } } } 为什么不“locking(syncRoot)”完成必要的内存一致性? 在“locking”语句之后,读写是否是不稳定的,这样才能完成必要的一致性?

Angular中的非Singleton服务

Angular在文档中明确指出服务是单身人士: Angular services are singletons 反直觉地, module.factory也返回一个Singleton实例。 鉴于非单身服务有很多用例,实现工厂方法返回服务实例的最好方法是什么,以便每次声明一个ExampleService依赖时,它都会被一个不同的实例ExampleService ?

Java单例和同步

请澄清我关于单例和multithreading的查询: 在multithreading环境下,用Java实现Singleton的最好方法是什么? 当多个线程同时尝试访问getInstance()方法时会发生什么情况? 我们可以让singleton的getInstance() synchronized吗? 真的需要同步,当使用Singleton类?

Java序列化:readObject()与readResolve()

有效的Java和其他资源提供了一个相当不错的解释,说明在使用可序列化的Java类时如何以及何时使用readObject()方法。 另一方面,readResolve()方法仍然有点神秘。 基本上我find的所有文件都只提到了其中的一个,或者只提到了两个。 尚未回答的问题是: 这两种方法有什么区别? 什么时候应该采用哪种方法? readResolve()应该如何使用,特别是在返回什么? 我希望你能对这个问题有所了解。

带有Java中的参数的单例

我正在阅读Wikipedia上的Singleton文章,并且遇到了这个例子: public class Singleton { // Private constructor prevents instantiation from other classes private Singleton() {} /** * SingletonHolder is loaded on the first execution of Singleton.getInstance() * or the first access to SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() […]

什么是C#中的单例?

非常简单的问题。 什么是Singleton,我应该什么时候使用它?

为什么苹果推荐使用dispatch_once来实现ARC下的单例模式?

在ARC下的单例共享实例存取器中使用dispatch_once的确切原因是什么? + (MyClass *)sharedInstance { // Static local predicate must be initialized to 0 static MyClass *sharedInstance = nil; static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; // Do any other initialisation stuff here }); return sharedInstance; } 在后台asynchronous实例化单例不是一个坏主意吗? 我的意思是,如果我请求共享实例并立即依赖它,会发生什么情况,但dispatch_once需要等到圣诞节才创build我的对象? 它不立即返回正确的? 至less这似乎是大中央调度的重点。 那他们为什么要这样做?

高效的线程安全单例在C ++中

单身类的通常模式是类似的 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) inst = new Foo(…); return *inst; } 然而,我的理解是这个解决scheme不是线程安全的,因为1)Foo的构造函数可能会被调用多次(这可能会也可能不重要),2)在返回到不同的线程之前,inst可能不会被完全构造。 一种解决方法是在整个方法中包装一个互斥锁,但是在实际需要之后,我花费了很长的时间同步开销。 另一种是类似的 static Foo &getInst() { static Foo *inst = NULL; if(inst == NULL) { pthread_mutex_lock(&mutex); if(inst == NULL) inst = new Foo(…); pthread_mutex_unlock(&mutex); } return *inst; } 这是正确的做法,还是我应该知道的任何陷阱? 例如,是否有任何可能发生的静态初始化顺序问题,即inst第一次调用getInst时,inst始终保证为NULL?