C# 单例模式Lazy<T>实现版本

非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

C# 单例模式Lazy<T>实现版本的相关文章

单例模式 Lazy 按需延迟加载

在我们刚学设计模式的时候,单例模式可能是设计模式中最简单最容理解的吧.今天我们就来探究他不一样的风格,不一样的单例模式 首先,我们来看一下通俗的单例模式的设计 public class Person { //这里必须要写私有构造函数 private Person() { } public string Name { get; set; } public string Age { get; set; } private static object obj = new object(); priva

单例模式简介以及C++版本的实现

    本篇博文主要内容参考 C++的单例模式一文,在此,为原作者耐心细致的分析讲解,表示感谢.本文将结合此篇文章,给出自己做实验后的理解以及代码,作为今天学习的小结.     单例模式,它的意图是保证一个类仅拥有一个实例,并在对外提供一个全局访问点,该实例被所有模块共享.这种模式的应用范围很广,比如系统日志输出,操作系统的窗口管理器,PC连接的键盘等等.     单例模式是一种设计模式,它的具体实现和各种语言特性有关,这里主要介绍在C++上面的实现,测试平台为Win7 64位,VS2010开发

【深入】java 单例模式(转)

[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头.企图把这个单例说透,说深入.但愿我不会做的太差. 首先来看一个典型的实现: 1 /** 2 * 基础的单例模式,Lazy模式,非线程安全 3 * 优点:lazy,初次使用时实例化单例,避免资源浪费 4 * 缺点:1.lazy,如果实例初始化非常耗时,初始使用时,可能造成性能问

【设计模式】-单例模式

单例模式很简单,就是在整个应用程序生命周期中只拥有一个实例. 如果不是很明白思路 可以把代码考下去自己执行一下 应该就明白了 一.单例模式是用来实现在整个程序中只有一个实例的. 二.单例类的构造函数必须为私有,同时单例类必须提供一个全局访问点. 三.单例模式在多线程下的同步问题和性能问题的解决. 四.懒汉式和饿汉式单例类. 五.C# 中使用静态初始化实现饿汉式单例类. /// <summary> /// 一.经典模式: /// </summary> public class Sin

解析C#开发过程常见的编程模式

单例模式: 在多线程的程序开发过程中经常会遇到单例模式[单件模式],它的特点是不是根据客户程序的调用而生成新的实例,而是控制某个类型的实例数量只有一个.也就是说,单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 接下来看一个经典的单例模式: public class SingleInstance { private static SingleInstance _instance=null; private SingleI

我理解的单例设计模式

单例模式我们在开发中经常用到,但是我们可能熟知一种单例模式,但是单例模式也有好多种,现在就对几种单例模式做个比较,明白其中的优缺点: 单例代码:"饿汉式",也就是当类加载进来的时候就创建实例,但是这种方式比较消耗资源.(单例模式的第一个版本) public class Singleton{ private static Singleton single=new Singleton(); private Singleton(){ System.out.println("生成一个

浅析单例模式与线程安全(Linux环境c++版本)

什么是单例模式 单例模式是设计模式中一种常用模式,定义是Ensure a class has only one instance, and provide a global point of access to it.(确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例) 用<设计模式之禅>里的话说,就是,在一个系统中,要求一个类有且仅有一个对象,如果出现多个就会出现"不良反应",比如以下情景可能会用到单例模式 要求生成唯一序列号的环境 在整个项目中需要一个共享

.net4.0设计模式(一)使用Lazy的单例模式

延迟加载,亦称延迟实例化,延迟初始化等, 主要表达的思想是,把对象的创建将会延迟到使用时创建,而不是在对象实例化时创建对象,即用时才加载.这种方式有助于提高于应用程序的性能,避免浪费计算,节省内存的使用等.针对于这种做法,似乎称之为即用即创建更为合适些. .net Framework4.0提供了一个包装类 Lazy<T>,可以轻松的实现延迟加载. public class LazySingleton { //私有化构造函数用于单例模式 private LazySingleton() { } /

01-05-01-1【Nhibernate (版本3.3.1.4000) 出入江湖】延迟加载及其class和集合(set、bag等)的Lazy属性配置组合对Get和Load方法的影响

这篇文章 http://ayende.com/blog/3988/nhibernate-the-difference-between-get-load-and-querying-by-id One of the more common mistakes that I see people doing with NHibernate is related to how they are loading entities by the primary key. This is because the