博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话设计模式读书笔记3——单例模式
阅读量:6427 次
发布时间:2019-06-23

本文共 2050 字,大约阅读时间需要 6 分钟。

     单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

我们来看一下单例模式下的饿汉模式代码:

///     /// 饿汉模式    ///     public class Singleton    {        //私有的构造器        private Singleton()        {        }        //私有的静态实例        private static Singleton instance = new Singleton();        public static Singleton GetInstance()        {            return instance;        }    }

懒汉模式代码:

///     /// 懒汉模式    ///     public class Singleton2    {        //私有的构造器        private Singleton2()        {        }        //私有的静态实例        private static Singleton2 instance = null;        public static Singleton2 GetInstance()        {            if (instance==null)                            {                instance=new Singleton2();            }            return instance;        }    }

 饿汉模式和懒汉模式的区别:

饿汉模式加载类时比较慢,但运行时获取对象的速度比较快,线程安全的

懒汉模式加载类时比较快,但运行时获取对象的速度比较慢,线程不安全的

C# 下的单例模式:

1、线程不安全:

//C# 下的单例模式(线程不安全) public class Singleton3 {   public static readonly Singleton3 instance = new Singleton3();   private Singleton3()   {   } }

    上面的实现完全可以达到单例模式的意图,保证一个类仅且有一个实例,并提供一个全局访问点.而这在实际应用我们还得注意一点,就是在多线程的调用.于此,我们还得保证线程安全.要保证线程安全其实也是很简单就可以实现的,只需要通过加锁和双重判断就OK,下面是简单的多线程的线程安全的实现:

2、线程安全: 

//C# 下的单例模式(线程安全)    public class Singleton4    {        ///         /// 声明一个静态锁        ///         private static object lockHelper = new object();                //私有构造函数        private Singleton4()        {        }        //注意使用 volatile 关键字        private static volatile Singleton4 instance = null;        //静态属性        public static Singleton4 Instance        {            get            {                if (instance == null)  //双检查                {                    lock (lockHelper)                    {                        if (instance == null)                        {                            instance = new Singleton4();                        }                    }                }                return instance;            }        }    }

 

转载于:https://www.cnblogs.com/lxblog/p/3921733.html

你可能感兴趣的文章
Intel VT-x处于禁用状态
查看>>
用什么软件可以修改PDF文件,软件的操作方法
查看>>
Windows下安装Django-使用Pycharm创建项目
查看>>
如何精简企业主数据“裹脚布”
查看>>
Pointer on C
查看>>
电子名片价值篇,让您了解不一样的电子名片
查看>>
& 号和管道符号(|)在不同场景下的使用方法
查看>>
curl 浏览器模拟请求实战
查看>>
多个VLAN中的vrrp备份组配置举例
查看>>
运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统(六)
查看>>
interlib在tomcat7.0的安装
查看>>
C#中 Process的扩展类ProcessExtensions
查看>>
水晶报表在大型WEB内部管理系统里的滑铁卢
查看>>
我的友情链接
查看>>
Git学习
查看>>
trove 基于 centos7 制作 mysql5.6 镜像
查看>>
结合i节点和数据块分析linux中软链接和硬链接的区别
查看>>
Heartbeat crm的配置
查看>>
Stream
查看>>
我的友情链接
查看>>