C#设计模式之单例模式

单例模式

概念:保证一个类只有一个实例,提供访问该实例的全局访问点。
优点:对唯一的实例对象进行受控访问,控制客户怎么访问该对象以及何时访问。

在这里插入图片描述

懒汉式单例模式:
只有当该对象被引用时,才会进行实例化。这种情况存在多线程安全性,需要使用双重锁来确保线程的安全。

Class Singleton {
	//提供一个静态的私有属性,类型为该类
	private static Singleton _instance;
	//私有化构造函数
	private Singleton() {}
	//提供一个访问点
	public static Singleton GetInstance(){
		if(_instance == null)
			_instance = new Singletom();
		return _instance;
	}
}

多线程下的单例模式:
防止多个线程同时访问并实例化多个对象。

Class Singleton {
	//提供一个静态的私有属性,类型为该类
	private static Singleton _instance;
	//创建一个只读的进程辅助对象
	private static readOnly Object obj = new Object();
	//私有化构造函数
	private Singleton() {}
	//提供一个访问点
	public static Singleton GetInstance(){
		//进行双重加锁,避免每次都进入加锁状态
		if(_instance == null){
			lock(obj){
				if(_instance == null)
					_instance = new Singletom();
				return _instance;
			}
		}
	}
}

饿汉式单例模式:
静态初始化方法,C#与公共语言运行库提供了一种 “ 静态初始化 ” 方法,这种方法不需要开发人员显示的编写多线程安全性代码,即可决解在多线程环境下它是不安全的问题。

//将该类定义为密封类,放止派生而实例化多个对象
public sealed Class Singleton {
	private static readOnly Singleton _instance = new Singleton();
	private Singleton(){}
	public static Singleton GetInstance(){
		return _instance;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值