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