设计模式笔记(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;
        }
    }

 

posted @ 2018-11-23 10:45  叶灿  阅读(96)  评论(0编辑  收藏  举报