剑指offer学习--实现单例模式
2015-11-13 12:48
417 查看
只能生成一个实例的类是为了实现单例模式的类型。
由于C#中调用静态构造函数时初始化静态变量,.NET运行时能够保证只调用一次静态构造函数,这样我们就能够保证只初始化一次instance。C#中调用静态构造函数的时机不是由程序员掌控的,而是当.NET运行时发现第一使用一个类型的时候自动调用该类型的静态构造函数。在Singleton中,实例instance并不是第一次调用属性Singleton.Instance的时候创建的,而是在第一次用到Singleton的时候就会被创建。
加同步锁前后两次判断实例是否已存在
我们只是在实例还没有创建之前加锁操作,以保证只有一个线程创建出实例。而当实例已经创建之后,我们已经不需要再做加锁操作了。public sealed class Singleton { private Singelton() { } private static object syncObj = new object(); private static Singleton instance = null; public static Singleton Instance { get { if (instance == null) { locak(syncObj) { if (instance == null) instance = new Singleton(); } } return instance; } } }
利用静态构造函数
public seled class Singleton { private Singelton() { } private static Singleton instance = new Singleton(); public static Singleton Instance { get { return instance; } } }
由于C#中调用静态构造函数时初始化静态变量,.NET运行时能够保证只调用一次静态构造函数,这样我们就能够保证只初始化一次instance。C#中调用静态构造函数的时机不是由程序员掌控的,而是当.NET运行时发现第一使用一个类型的时候自动调用该类型的静态构造函数。在Singleton中,实例instance并不是第一次调用属性Singleton.Instance的时候创建的,而是在第一次用到Singleton的时候就会被创建。
实现按需创建实例
public sealed class Singleton { Singleton() { } public static Singleton Instance; { get { return Nested.instance; } } class Nested { static Nested() { } internal static readonly Singleton instance = new Singleton(); } }
相关文章推荐
- AngularJS的学习--$on、$emit和$broadcast的使用
- Extjs6 gridPanel排序与获取Store的排序信息
- js-Node对象属性二
- 10个原生JavaScript技巧
- js-Node对象属性
- 新知识 HtMl 5
- javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,
- javascript简介
- JS总结
- jquery事件触发例子
- CSS3新属性(上菜中.....)
- 【JQuery】write less,do more
- jQuery ajax大数据量each输出 list
- 前端开发工程师
- jquery判断div是否显示或者隐藏
- 学习JavaScript正则表达式
- CreateJs系列教程之 EaselJs&Tween_5_绘制点击提示(Shape,Tween)
- js实现html的placeholder属性效果
- jquery实现九宫格大转盘抽奖
- 作为一个前端工程师的2015年度学习计划