zoukankan      html  css  js  c++  java
  • 二十三种设计模式之单例模式

    单例模式:个人理解,保证只创建一个实例的设计模式。

    用于资源单一,例如访问数据库等。

    1.完整的单例模式

    创建控制台命令,SingletonDemo

    创建一个SingletonFirst类

    class SingletonFirst
    {
            private SingletonFirst()   //使用private的目的是,防止外部可以new 出
           {
                Thread.Sleep(1000);
               Console.WriteLine("创建SingletonFirstDemo");
           }
         public static object obj = new object();//为了lock创建一个对象
         public static SingletonFirst sf = null;//static 使用因为静态函数调用必须为静态变量
         public static SingletonFirst CreateInstance()//用staic 是为了 类名.函数名可以直接调用
       {
           if (sf == null)
          {
            Console.WriteLine("进入临界区");
             lock (obj)//锁定obj 知道被释放 {开始 直到}结束释放obj                  //加lock的目的为了使用于多线程使用一个资源                            
            {
                if (sf == null)
              {
                sf = new SingletonFirst();
               }
    }
    }
    return sf;
    }
    public void SingleShow()
    {
    Console.WriteLine("展示SingleShow()");
    }
    }

    2.利用.Net frameWork   CLR来创建单例模式

    class SingletonSecond
    {
    private SingletonSecond()
    {
    Thread.Sleep(1000);
    Console.WriteLine("创建SingletonFirstDemo");
    }
    static SingletonSecond()    //静态函数在编译时就创建出对象,并且只有一个
    {
    sf = new SingletonSecond();
    }
    public static object obj = new object();
    public static SingletonSecond sf = null;//static 使用因为静态函数调用必须为静态变量
    public static SingletonSecond CreateInstance()//用staic 是为了 类名.函数名可以直接调用
    {
    return sf;
    }
    public void SingleShow()
    {
    Console.WriteLine("展示SingleShow()");
    }
    }

    3.更简便的方式

    class SingletonThird
    {
    private SingletonThird()
    {
    Thread.Sleep(1000);
    Console.WriteLine("创建SingletonFirstDemo");
    }
    public static SingletonThird sf = new SingletonThird();//static 使用因为静态函数调用必须为静态变量
    public static SingletonThird CreateInstance()//用staic 是为了 类名.函数名可以直接调用 用CLR 保证
    {
    //不会被释放的
    return sf;
    }
    public void SingleShow()
    {
    Console.WriteLine("展示SingleShow()");
    }

  • 相关阅读:
    free解释
    无损 JBIG2 编码库(Lossless JBIG2 Encoder)
    PDF补丁丁暂停更新
    PDF补丁丁将字符识别结果写入PDF文件功能即将完成
    PDF补丁丁0.3.3版:字符识别结果写入PDF文件功能邀请测试
    PDF补丁丁 0.3.3.58版修复打开、输出超大型PDF文件问题
    PDF补丁丁0.3.3版即将发布
    PDF补丁丁0.3.3.12 新增查看PDF文件隐藏对象及导出流对象功能
    PDF 补丁丁 0.3.3 正式版发布
    PDF 补丁丁0.3.3.20版新增JBIG2压缩功能,可为扫描PDF瘦身
  • 原文地址:https://www.cnblogs.com/haibozhu/p/7467638.html
Copyright © 2011-2022 走看看