C#简而易懂教你设计模式,(1)单例模式

1.对单例模式的理解

一个类只被实例化一次,而且不能再被实例化

2.单例模式长什么样子

public class Singleton

{

  private static Singleton instance;

  private  Singleton()

  {

  }‘

  publish Singleton    GetInstance()

  {

   if(instance==null){

    instance=new Singleton ();

   }else{

    return instance;

   } 

  }

}

 

为何是这样子 首先创建一个类  私有的构造方法导致外部不能对他进行实例化, 创建了一个静态的instance字段和一个GetInstance的方法 , 只能通过GetInstance方法获取对象的实例,而当instance被实例化后请求返回的是同一个对象

3.为什么要用单例和单例模式的好处

(1)使用的时候确保了所有对象使用的都是同一个实例

(2)当有需要使用这种情况的就可以避免重复的创建和销毁对象,提高了性能

(3)可以特殊情况的使用  比如可以作为存储

4.那又有什么缺点呢

(1)好用当然扩展就难了 

5.实际工作中那些地方有用到呢

(1)添加日志的应用,日志应用的地方比较多,会减少频繁的日志对象的创建

(2)连接池的创建,比方创建httpClient不需要频繁的创建

(3)等等

6.好了  大概了解单例模式了  下面就说一下多线程下的单例模式

上面我们那种创建单例的方式如果在多线程的情况下可能会创建多个实例,为什么呢 多线程的东西 咱这就不细讲了  可以私聊我

然后怎么能避免多线程的情况下还是一个单例模式呢  用到一个叫锁(lock)的东西  上代码

    public class Singleton
    {
       
        private static Singleton instance;

        private static readonly object locker = new object();
        private Singleton()
        {
        }

       public static Singleton GetInstance()
        {
           if (instance== null)
            {
                lock (locker)
                {
                    if (instance== null)
                    {
                        instance= new Singleton();
                    }
                }
            }
            return instance;
        }
    }        

 

通过加锁来控制当多个线程同时访问的时候保证实例的唯一性

当然还有一种方式也是我认为最方便的一种方法

  public class Singleton
  {
            public static readonly Static_Singleton instance = new Singleton();
             private Static_Singleton() { }
   }

利用静态变量直接实例化对象

 

纪念一下 其实开通了博客一直没写过 最近不太忙瞎写写

C#简而易懂教你设计模式,(1)单例模式

上一篇:基于ASP.NET使用C#实现简单人脸识别功能


下一篇:Delphi格式化函数Format、FormatDateTime和FormatFloat详解