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

  • 相关阅读:
    js深拷贝和浅拷贝
    Entity Framework在WCF中序列化的问题
    EF Code First学习笔记:数据库创建
    Entity Framework Code First级联删除
    EF Code First 学习笔记:表映射
    Func与Action
    jsp/servlet页面跳转丢失样式问题
    Tomcat中配置URIEncoding="UTF-8"来处理中文的方法
    Android studio 自动导入(全部)包 import
    LInux系统配置
  • 原文地址:https://www.cnblogs.com/haibozhu/p/7467638.html
Copyright © 2011-2022 走看看