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()");
    }

  • 相关阅读:
    加入页面切换动画, 避免冷启动
    Spark Shuffle模块——Suffle Read过程分析
    java使用线程请求訪问每次间隔10分钟连续5次,之后停止请求
    二叉排序树(BST)构造与应用
    L贪心基础
    leetcode笔记:Ugly Number II
    Android API Guides---Layouts
    红外目标图像中阈值切割方法的比較与研究
    IOS开发证书变成“此证书的签发者无效”解决方法
    Web前端开发规范收集
  • 原文地址:https://www.cnblogs.com/haibozhu/p/7467638.html
Copyright © 2011-2022 走看看