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

    其实工作中一直在使用单例模式但是一直没留意过,有空简单总结一下。

    单例模式的要点有三个:

      1、是某个类只能有一个实例。

      2、是它必须自行创建这个实例。

      3、是它必须自行向整个系统提供这个实例。

    从具体实现角度来说,就是以下三点:

      1、是单例模式的类只提供私有的构造函数。

      2、是类定义中含有一个该类的静态私有对象。

      3、是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

    举例代码实现:

    最简单直接的单例

    public class Singleton
    {
        private static Singleton instance;
     
        /// <summary>
        /// 构造方法私有,外键不能通过New类实例化此类
        /// </summary>
        private Singleton()
        {
        }
    
        /// <summary>
        /// 此方法是本类实例的唯一全局访问点
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            //如实例不存在,则New一个新实例,否则返回已有实例
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }

    多线程安全

    public class Singleton
    {
        private static Singleton instance;
     
        /// <summary>
        /// 程序运行时,创建一个静态只读的进程辅助对象
        /// </summary>
        private static readonly object _object = new object();
     
        /// <summary>
        /// 构造方法私有,外键不能通过New类实例化此类
        /// </summary>
        private Singleton()
        {
        }
        /// <summary>
        /// 此方法是本类实例的唯一全局访问点
        /// (双重加锁 Double-Check Locking)
        /// </summary>
        /// <returns></returns>
        public static Singleton GetInstance()
        {
            //先判断实例是否存在,不存在再加锁处理
            if (instance == null)
            {
                //在同一时刻加了锁的那部分程序只有一个线程可以进入,
                lock (_object)
                {
                    //如实例不存在,则New一个新实例,否则返回已有实例
                    if (instance == null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
  • 相关阅读:
    基于 Docker 的现代软件供应链
    Java 性能调优指南之 Java 集合概览
    Docker 网络基础介绍
    选择 Java 编写 iOS 与 安卓 App的八大理由
    使用Babel和ES7创建JavaScript模块
    Java 8方法引用使用指南
    软件可扩展性:来自星巴克的经验
    Docker 监控之 SaaS 解决方案
    如何高效的阅读uni-app框架?(建议收藏)
    如何高效的阅读uni-app框架?(建议收藏)
  • 原文地址:https://www.cnblogs.com/flywing/p/8434316.html
Copyright © 2011-2022 走看看