单例模式是一种创建型设计模式,它的模式动机是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式根据不同的需求有三种实现方式:静态初始化单例模式、单线程单例模式和多线程单例模式。
(1)静态初始化单例模式
静态初始化单例模式是使用静态static的特性,在初始化时就实现单例类只有一个实例,有以下两种实现形式:
其中图1是直接初始化静态对象,静态对象是全局唯一的,只分配一处内存空间,其他所有地方对该对象的调用都是对这一块内存区域的引用,再通过访问函数GetInstance()访问该对象,即实现了单例;而图二与图一的原理相同,只不过是静态对象的初始化放在了静态构造函数中,静态构造函数无修饰符、无参数,一个类中只能有一个静态构造函数,且该构造函数只能执行一次,由.net框架调用(所以没有参数)。
该方法简洁方便,但缺点是程序在初始化后,静态对象就会被CLR构造出来,即使你并没有使用该静态对象。
(2)单线程单例模式
单线程单例模式与上面静态初始化单例模式不同,它不在初始化时创建静态对象,只有通过属性的访问器访问时才会创建对象,实现代码如下:
顾名思义,该方法在单线程中是安全的,但在多线程中可能出现多个线程同时判断出instance==null为true的情况,这就不能保证该类只有一个实例。
(3)多线程单例模式
多线程单例模式是在多线程的情况下对对象的创建行为加锁,保证实例的唯一: