zoukankan      html  css  js  c++  java
  • ●单例模式

    单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。

     通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

    1、

    /// <summary>
    /// 单例模式
    /// </summary>
    public class Singleton
    {
        private static Singleton _singleton = null;
        private static readonly object _lock = new object();  //程序运行时创建一个只读的进程辅助对象
     
        /// <summary>
        /// 构造函数私有化,这样就堵死了外界利用new创建此类实例的可能
        /// </summary>
        private Singleton()
        {
        }
     
        public static Singleton CreateInstance()
        {
            if (_singleton == null)  //先判断实例是否存在,不存在再加锁处理
            {
                lock (_lock)  //加锁,当多线程时,只能有一个线程进入
                {
                    if (_singleton == null)  //当多线程调用时,可能会有多个线程通过第一层判断,所以这里再次判断
                    {
                        _singleton = new Singleton();
                    }
                }
            }
     
            return _singleton;
        }
    }

    2、静态初始化

      c#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显式地编写线程安全代码,即可解决多线程环境下它是不安全的问题。

    /// <summary>
    /// 单例模式
    /// </summary>
    public sealed class SingletonSecond  //sealed,阻止发生派生,派生可能会增加实例
    {
        //readonly,第一次引用类的任何成员时创建实例。公共语言运行库负责处理变量初始化
        private static readonly SingletonSecond _single = new SingletonSecond();
     
        private SingletonSecond()
        {
        }
     
        public static SingletonSecond CreateInstance()
        {
            return _single;
        }
    }

    第二种方式,是在自己被加载时就将自己实例化,所以被称为恶汉式单例类;第一种,要在第一次被引用时,才会将自己实例化,被称为懒汉式单例类。

    第二种方式,会提前占用系统资源。

  • 相关阅读:
    linux php安装ODBC扩展
    linux wget变成000权限
    linux tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    字符串的操作, 日期格式, 数据转换, 模糊查询
    Oracle控制结构
    创建角色,用户,视图,索引,分析计划
    Oracle用触发器解决修改主表A主键值,从表的外键值也会跟着改变的问题
    行为科学统计第17章--回归
    行为科学统计第13-15章
    行为科学统计第12章
  • 原文地址:https://www.cnblogs.com/phantom-k/p/7398373.html
Copyright © 2011-2022 走看看