• 设计模式--单例模式(Singleton)


    简述:单例模式顾名思义在一个程序运行的全部阶段,其实例化对象都只有一个,实际环境的运用包括window操作系统中的任务管理器、程序中的错误日志处理对象等。

    单例模式具体实现分为“饥汉模式”、“饱汉模式”。

    实现前提:私有化构造函数、屏蔽对外开放的实例化构造函数

    “饥汉模式”:(又名懒汉模式,使用的时候再实例化)

    public class Global
        {
            /// <summary>
            /// 私有化构造函数
            /// </summary>
            private Global ()
            {
            }
    
            /// <summary>
            /// 用于存储单例对象.
            /// </summary>
            private static Global _single = null;
            /// <summary>
            /// 设定.
            /// </summary>
            /// <value>The single.</value>
            public static Global Single {
                get{
                    if (_single == null)
                        _single = new Global ();
                    return _single;
                }
            }
      }

    “饱汉模式”:(不管用不用,先实例化了再说)

    public class FreeGlobal
        {
            /// <summary>
            /// 私有化构造函数
            /// </summary>
            private FreeGlobal ()
            {
            }
    
            /// <summary>
            /// 用于存储单例对象.
            /// </summary>
            private static FreeGlobal _single = new FreeGlobal();
            /// <summary>
            /// 设定.
            /// </summary>
            /// <value>The single.</value>
            public static FreeGlobal Single {
                get{
    return _single;
                }
            }
      }

    测试结果:

    image


    线程安全设定:

    在多线程的情况下,可能会出现多个实例的情况,所以可以通过线程锁进行处理。

    public class FreeGlobal
        {
            private FreeGlobal ()
            {
            }
            private static FreeGlobal _single = new FreeGlobal();
            /// <summary>
            /// 用于线程锁定对象.
            /// </summary>
            private static object obj = new object ();
            public static FreeGlobal Single {
                get{
                    lock (obj) {//锁定
                        return _single;
                    }
                }
            }
        }

    单例模式的变异版本:

    public class SingleInCSharp
        {
            private SingleInCSharp(){}
            public static SingleInCSharp Single = new SingleInCSharp();
        }

    当然了,实现方式有很多种,但是最核心的思想就是“私有化构造函数”。

    个人理解,如有偏颇,敬请指教!

  • 相关阅读:
    mysql
    mysql
    mysql
    mysql
    sed编辑命令
    awk正则应用
    awk运算符
    awk命令细节
    uniq命令
    sort命令
  • 原文地址:https://www.cnblogs.com/szfBlogs/p/5119148.html
Copyright © 2020-2023  润新知