对Singleton的实现方法做一个总结
2008-05-10 02:02
274 查看
原帖:
http://www.cnblogs.com/ASPNET2008/archive/2008/05/09/1190328.html
首先直接文章作者及回复中的兄弟提到的两种Singleton方法。
第一种
public class Singleton
public class Singleton
public class Singleton
public class Singleton
public static Singleton _instance = null;
private Singleton()
}
public static Singleton CreateInstance()
Interlocked.CompareExchange(ref _instance, new Singleton(), null);
return _instance;
}
}
因为Interlocked.CompareExchange是一个原子操作, 所以是线程安全的。不过注意那个new Singleton(), 它会不断的被执行。 如果构造的过程很耗费资源, 这是一个问题。 其实利用delegate, 我们可以有一些新玩法, 把包括第二次及以后进入CreateInstance的开销降到最低; 如果谁想到了可以给我留言。(Update: 我的做法放在了第20楼, 注意脑袋回复中提到的问题, 其实这种做法我一般用在别处完成更贴切的任务, 具体分析日后再说了)
最后, 稍加改动, 可以把Singleton成泛型的。不过个人感觉意义不大了, 除非用Singleton的地方太多, 懒得打代码, 也可以考虑。 嗯, 结束了么? 不知道大家觉得这些是不是也一塌糊涂,自己感觉我不太适合写这类文章....
http://www.cnblogs.com/ASPNET2008/archive/2008/05/09/1190328.html
首先直接文章作者及回复中的兄弟提到的两种Singleton方法。
第一种
public class Singleton
public class Singleton
public class Singleton
public class Singleton
public static Singleton _instance = null;
private Singleton()
}
public static Singleton CreateInstance()
Interlocked.CompareExchange
return _instance;
}
}
因为Interlocked.CompareExchange是一个原子操作, 所以是线程安全的。不过注意那个new Singleton(), 它会不断的被执行。 如果构造的过程很耗费资源, 这是一个问题。 其实利用delegate, 我们可以有一些新玩法, 把包括第二次及以后进入CreateInstance的开销降到最低; 如果谁想到了可以给我留言。(Update: 我的做法放在了第20楼, 注意脑袋回复中提到的问题, 其实这种做法我一般用在别处完成更贴切的任务, 具体分析日后再说了)
最后, 稍加改动, 可以把Singleton成泛型的。不过个人感觉意义不大了, 除非用Singleton的地方太多, 懒得打代码, 也可以考虑。 嗯, 结束了么? 不知道大家觉得这些是不是也一塌糊涂,自己感觉我不太适合写这类文章....
相关文章推荐
- C#实现让程序只能打开一个实例(总结3方法)
- C++学习总结_声明一个对象并实现声明类的方法
- winform实现让程序只能打开一个实例(总结3方法)
- Java实现把两个数组合并为一个的方法总结
- C#实现让程序只能打开一个实例(总结3方法)(转)
- Map接口及其重要实现类的方法总结:从HashMap中放入,查找,删除一个对象,并将全部value放入到一个数组中;获得HashMap的全部数据
- 程序员面试金典——解题总结: 9.17中等难题 17.11给定rand5(),实现一个方法rand7()。也就是,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法
- Listview控件使用SimpleAdapter适配器实现屏幕下滑增加一个item选项以及用到的方法总结
- C#实现让程序只能打开一个实例(总结3方法)(转)
- Python实现判断一个字符串是否包含子串的方法总结
- C#实现让程序只能打开一个实例(总结3方法)
- [技巧] C#实现让程序只能打开一个实例(总结3方法)
- java中,一个类实现某个接口,必须重写接口中的所有方法吗???
- Windows与Linux实现共享方法总结
- 使用extjs,来实现一个页面调用另一个页面中的方法,并且能获得方法的返回值
- [代码重用]--PHP 实现代码复用的一个方法 traits新特性
- 批量删除记录时如何实现全选方法总结 (转)http://www.cnblogs.com/chenou/articles/1349646.html[Asp.net Ajax 控件]
- CSS-左侧固定宽度,右侧自适应宽度的两列布局实现方法总结
- Activity任务栈的管理 -----销毁前一个相同的activity(还有一种简单的方法实现)
- 利用pushState, popState和location.hash等方法自己实现一个小型路由