zoukankan      html  css  js  c++  java
  • 设计模式笔记(1)-单体模式

    对系统中唯一的通讯硬件操作通常需用到单例模式,不仅可避免重复创建实例,也可对异步操作中发生的异常问题从一定程度上加以避免,同时杜绝了重复操作对硬件资源的浪费。

    单体模式官方定义为:确保一个类只有一个实例,并为其提供一个全局访问点。

    为避免创建对象时调用默认构造函数需编写私有构造函数,同时提供一个全局方法返回实例,并在方法中构造与返回该类型的唯一实例。

    注意:编写过程中需避免多线程同时调用全局访问点,故须在访问点内进行同步,并在同步后再次进行空值验证。

     internal class Singleton
        {
            public void Test()
            {
                Singleton sig = Singleton.GetSingleton();
    
                sig = Singleton.GetSingleton();//依据对象实例化时的时间num,和哈希确定获取的是否为同一对象
            }
            private static Singleton sig;//全局变量,作为唯一对象供调用
            /// <summary>
            /// 单例对象初始化时间的秒数
            /// </summary>
            public int Num { get; set; }
            /// <summary>
            /// 实例的哈希值
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 私有初始化函数,避免外部调用
            /// </summary>
            private Singleton()
            { Num = DateTime.Now.Second; Name = this.GetHashCode().ToString(); }
            private static object threadlocker = new Object();//同步锁,防止异步线程重复验证实例为空而重复创建实例
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <returns></returns>
            public static Singleton GetSingleton()
            {
                if (sig == null)
                {//空值验证
                    lock (threadlocker)
                    {//线程同步
                        if (sig == null)//再次验证对象未经实例化
                        { sig = new Singleton(); }
                        else { }
                    }
                }
                else { }
                return sig;
            }
        }
  • 相关阅读:
    2-1(续)
    2-1
    28-69. Sqrt(x)
    27-75. Sort Colors
    26-78. Subsets
    MySQL--->存储引擎及图形化工具
    MySQL--->高级对象
    MySQL--->常用函数
    MySQL--->多表查询
    MySQL--->高级查询
  • 原文地址:https://www.cnblogs.com/yecan/p/10006084.html
Copyright © 2011-2022 走看看