设计模式之单例模式

设计模式之单例模式

一.模式介绍

单例模式(singleton)在实际编写代码中非常常用的一种设计模式,它保证了一个类仅有一个实例,

并且提供了一个访问它的全局访问点。

二.模式结构

单例模式的结构如下图所示:

点击查看源网页

代码如下所示:

 class Singleton
​    {
​        private static Singleton instance;
​        private Singleton()
​        {
​            }
​        public static Singleton GetInstance()
​        {
​            if (instance == null)
​                instance = new Singleton();
​            return instance;
​        }
​    }


三.扩展

上述写得单例模式在一般情况下是没有问题的,但当多线程时可能就会创建多个实例,此时我们可以通过lock来限制线程保证其只生成一个单例,代码如下:

class ThreadSingletoncs
​    {
​        private static ThreadSingletoncs instance;
​        private static readonly object syncRoot = new object();
​        private ThreadSingletoncs()
​        {
​        }
​        public static ThreadSingletoncs GetInstance()
​        {
​            if(instance == null)
​            {
​                lock(syncRoot)
​               {
​                    if(instance == null)
​                    {
​                        instance = new ThreadSingletoncs();
​                    }
​                }
​            }
​            return instance;
​        }
​    }


我们也可以在程序加载时就实例化出一个实例,此后不在产生。代码如下,

   public sealed class SealedSingleton
​    {
​        private static readonly SealedSingleton instance = new SealedSingleton();
​        private SealedSingleton()
​        { }
​        public static SealedSingleton GetInstance()

​        {
​            return instance;
​        }
​    }

这种方式因为加载时就将自己实例化了,所以被称为饿汉式单例;而上面第一次引用实例化的被称为懒汉式单例。实际写代码过程中,我们可以根据自己的需求来生成单例。

加载时就将自己实例化了,所以被称为饿汉式单例;而上面第一次引用实例化的被称为懒汉式单例。实际写代码过程中,我们可以根据自己的需求来生成单例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值