.Net设计模式------单件模式(Singleton Pattern)

概述

Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。

从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责!

目的

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

几种实现

1.简单实现

  1. class SingleInstance
  2.     {
  3.         static SingleInstance mInstance = new SingleInstance();
  4.         
  5.         SingleInstance()
  6.         { 
  7.         }
  8.         static SingleInstance()
  9.         { 
  10.         }
  11.         public static SingleInstance GetInstance()
  12.         {
  13.             if (mInstance != null)
  14.             {
  15.                 return mInstance;
  16.             }
  17.         }
  18.     }

2.线程安全实现:

  1.  class SingletonWrrper
  2.     {
  3.         static SingletonWrrper mInstance = null;
  4.         static readonly object objPack = new object();
  5.         SingletonWrrper()
  6.         { 
  7.         }
  8.         public static SingletonWrrper GetInstance()
  9.         {
  10.         
  11.             
  12.                 lock (objPack)
  13.                 {
  14.                     if (mInstance == null)
  15.                     {
  16.                         mInstance = new SingletonWrrper();
  17.                     }
  18.                 }
  19.             return mInstance;
  20.         }
  21.     }

 

3.静态初始化:

    class SingleInstance
    {
        static readonly SingleInstance mInstance = new SingleInstance();
       
        SingleInstance()
        {
        }

        static SingleInstance()
        {
        }

        public static SingleInstance GetInstance()
        {
            return mInstance;
        }
    }

4.双重锁定:

    class SingletonWrrper
    {
        static SingletonWrrper mInstance = null;
        static readonly object objPack = new object();
        SingletonWrrper()
        {
        }

        public static SingletonWrrper GetInstance()
        {
            if (mInstance == null)
            {
                lock (objPack)
                {
                    if (mInstance == null)
                    {
                        mInstance = new SingletonWrrper();
                    }
                }
            }
            return mInstance;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值