• 设计模式笔记(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;
            }
        }
  • 相关阅读:
    ES 内存深度解析
    Spring Cache介绍和使用
    mysql 索引及索引创建原则
    mysql中四种存储引擎的区别和选择
    Java中数组、List、Set互相转换
    COGS 1151 活动安排
    洛谷P1650赛马与codevs 2181 田忌赛马
    5月3日济南清北学堂随堂测试题目
    codevs 1206 保留两位小数
    codevs 1203 判断浮点数是否相等
  • 原文地址:https://www.cnblogs.com/yecan/p/10006084.html
Copyright © 2020-2023  润新知