非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方式来初始化达到优化的目的。
时间: 2024-10-06 06:48:08