非Lazy版本的普通單例實現: Lazy版本的單例實現: 對比分析: 使用Lazy<T>來初始化,使得代碼看起來更為簡潔易懂。其實非Lazy<T>版本的單例實現從本質上說就是一個簡單的對象Lazy的實現。 一般對於一些占用大的記憶體的對象,常常使用Lazy方式來初始化達到優化的目的。 ...
非Lazy版本的普通單例實現:
public sealed class SingletonClass : ISingleton { private SingletonClass () { // the private contructors } public static ISingleton Instance { get { if (instance == null) { lock (InstanceLock) { if (instance != null) { return instance; } instance = new SingletonClass(); } } return instance; } } private static ISingleton instance; private static readonly object InstanceLock = new object(); private bool isDisposed; // other properties public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.isDisposed) { if (disposing) { // dispose the objects you declared } this.isDisposed = true; } } } public interface ISingleton : IDisposable { // your interface methods }
Lazy版本的單例實現:
public sealed class SingletonClass : ISingleton { private SingletonClass () { // the private contructors } public static ISingleton Instance = new Lazy<ISingleton>(()=> new new SingletonClass()).Value;
private static readonly object InstanceLock = new object(); private bool isDisposed; // other properties public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!this.isDisposed) { if (disposing) { // dispose the objects you declared } this.isDisposed = true; } } } public interface ISingleton : IDisposable { // your interface methods }
對比分析:
使用Lazy<T>來初始化,使得代碼看起來更為簡潔易懂。其實非Lazy<T>版本的單例實現從本質上說就是一個簡單的對象Lazy的實現。
一般對於一些占用大的記憶體的對象,常常使用Lazy方式來初始化達到優化的目的。