C#深入浅出设计模式(一)单例模式Singleton Pattern

    单例模式是一种创建型设计模式,它的模式动机是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    单例模式根据不同的需求有三种实现方式:静态初始化单例模式、单线程单例模式和多线程单例模式。

(1)静态初始化单例模式

静态初始化单例模式是使用静态static的特性,在初始化时就实现单例类只有一个实例,有以下两种实现形式:

图1
图2

其中图1是直接初始化静态对象,静态对象是全局唯一的,只分配一处内存空间,其他所有地方对该对象的调用都是对这一块内存区域的引用,再通过访问函数GetInstance()访问该对象,即实现了单例;而图二与图一的原理相同,只不过是静态对象的初始化放在了静态构造函数中,静态构造函数无修饰符、无参数,一个类中只能有一个静态构造函数,且该构造函数只能执行一次,由.net框架调用(所以没有参数)。

该方法简洁方便,但缺点是程序在初始化后,静态对象就会被CLR构造出来,即使你并没有使用该静态对象。

(2)单线程单例模式

单线程单例模式与上面静态初始化单例模式不同,它不在初始化时创建静态对象,只有通过属性的访问器访问时才会创建对象,实现代码如下:

图3

顾名思义,该方法在单线程中是安全的,但在多线程中可能出现多个线程同时判断出instance==null为true的情况,这就不能保证该类只有一个实例。

(3)多线程单例模式

多线程单例模式是在多线程的情况下对对象的创建行为加锁,保证实例的唯一:

图4

以上是三种单例模式的实现方法,使用时需根据需求选择使用。使用该模式能减少实例对象的创建从而减少内存的开销,避免对资源的占用,但它不能继承,没有接口。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容