1、Singleton模式(创建型)A class of which only a single instance can exist
2010-09-28 21:45
453 查看
单线程:
.NET optimized code //单、多通吃
动机(Motivation)
1、在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
2、如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
3、这应该是类设计者的责任,而不是使用者的责任。
意图(Intent)
保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF
Singleton模式扩展
• 将一个实例扩展到n个实例,例如对象池的实现。
• 将new 构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类的一个实例。
• 理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的实例构造器的任意调用”。
不错的参考:
http://www.dofactory.com/Patterns/PatternSingleton.aspx
/article/4589467.html
//lazy load public class Singleton { private static Singleton instance; private static object lockHelper = new Object(); private Singleton{} public static Singleton Instance { get{ if(instance == null) { lock(lockHelper)//avoid multi-thread { if(instance == null)//double check instance = new Singleton(); } } return instance; } } //thread not safe }
.NET optimized code //单、多通吃
代码 public class SingletonProvider<T> where T : new() { SingletonProvider() { } public static T Instance { get { return SingletonCreator.instance; } } class SingletonCreator { static SingletonCreator() { } internal static readonly T instance = new T(); } }
动机(Motivation)
1、在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
2、如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
3、这应该是类设计者的责任,而不是使用者的责任。
意图(Intent)
保证一个类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF
Singleton模式扩展
• 将一个实例扩展到n个实例,例如对象池的实现。
• 将new 构造器的调用转移到其他类中,例如多个类协同工作环境中,某个局部环境只需要拥有某个类的一个实例。
• 理解和扩展Singleton模式的核心是“如何控制用户使用new对一个类的实例构造器的任意调用”。
不错的参考:
http://www.dofactory.com/Patterns/PatternSingleton.aspx
/article/4589467.html
相关文章推荐
- VB6:关于“Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types.”的编译错误
- JNI DETECTED ERROR IN APPLICATION: can't call void XXX on instance of java.lang.Class <XXX>解决方案
- Only one instance of a ScriptManager can be added to the page.
- JSON parse error: Can not construct instance of model.Class: no suitable constructor found
- (NOT CLEAR)Question 22: Which of the following functions of the ifstream class can be used to determine the current position of
- Only the first instance of IPTraf can configure或者IP Traffic Monitor already listening on eth0
- 'Push segues can only be used when the source controller is managed by an instance of UINavigationC
- JNI DETECTED ERROR IN APPLICATION: can't call void XXX on instance of java.lang.Class <XXX>解决方案
- Jfinal报错Can not create instance of class: demo.DemoConfig
- How can I dump only certain entries of a table based on my condition?
- Exception sending context initialized event to listener instance of class org.springframework.web.co
- The member enum Constants2 can only be defined inside a top-level class放置位置不对
- 连续多次进入使用了MJRefresh的页面应用会崩 An instance 0xdb48a00 of class UITableView was deallocated while key value
- 严重: Exception sending context initialized event to listener instance of class org.springframework.we
- Exception sending context initialized event to listener instance of class org.springframework.web.co
- Class org.apache.struts2.json.JSONWriter can not access a member of
- Xfile 错误记录 object is not an instance of declaring class
- 错误:A SPI class of type org.apache.lucene.*** with name 'Whitespace' does not exist.
- Tomcat配置: The archive: /bin/bootstrap.jar which is referenced by the classpath, does not exist.
- Qt Creator Debugging Helper crash when expanding a node of Class which inherit QObject directly