创建型模式—单例模式

单例模式(Singleton)定义:要求一个类有且仅有一个实例,并且提供了一个全局的访问点,在同一时刻只能被一个线程所访问。

  单模式的特点:
  1>、单类只能有一个实例。
  2>、单类必须自身创建唯一实例。

  3>、单类必须给所有其它对象提供唯一实例。


namespace Singleton
{
    public class Singleton
    {
        //定义一个私有的静态全局变量来保存该类的唯一实例
        private static Singleton singleton;
        //定义一个只读静态对象且这个对象是在程序运行时创建的
        private static readonly object syncObject = new object();
        /// 
        /// 构造函数必须是私有的
        /// 这样在外部便无法使用 new 来创建该类的实例
        /// 
        private Singleton()
        { }

        /// 
        /// 定义一个全局访问点
        /// 设置为静态方法
        /// 则在类的外部便无需实例化就可以调用该方法
        /// 
        /// 
   
   
        public static Singleton GetInstance()
        {
            //这里可以保证只实例化一次
            //即在第一次调用时实例化
            //以后调用便不会再实例化
            //第一重 singleton == null
            if (singleton == null)
            {
                lock (syncObject)
                {
                    //第二重 singleton == null
                    if (singleton == null)
                    {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }
}

  单模式使用注意点:

  1>、不要使用单例模式存取全局变量。这违背了单例模式的用意,最好放到对应类的静态成员中。

  2>、不要将数据库连接做成单例,因为一个系统可能会与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。Singleton模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。

  单模式适用情形:

  1>、当类只能有一个实例而且客户可以从一个众所周知的访问点访问时;

  2>、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能适用一个扩展的实例时。

  单件模式具有以下特点:

  1>、实例控制:Singleton会阻止其他对象实例化其自己的Singleton对象的副本,从而确保所有对象都访问唯一实例;

  2>、额外的开销:虽然很小,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值