这个类我平时没用过,但是面试的时候问到了,我知道它的作用是让这个类只能实例化一次,但这样有什么好处呢?什么时候用到呢?
public class Singleton
{
private Singleton()
{
}
private static Singleton instance;
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
------解决思路----------------------
如果一定要问“有什么好处”,实际上你可以把它跟你在任意类库模块中定义一个
public static Singleton xx;对比一下。然后考虑一下这样做的好处,以及这样的好处是不是必须死抠。
“四人帮”大概就是考虑到这个xx可能被无意中重新赋值,而搞出了“模式”。
而 .net 设计者懂得使用c#或者 vb.net 的编译器语法糖来处理类似问题(写个 private set; 就行了),而不是去搞什么雷人的“设计模式”。因为要是形式上太复杂了,那么还不如干脆就用一个“不太安全的”简单的 public static 声明就得了,然后用一两个简单的测试用例来保证逻辑正确性。
然而拿他来面试的人(我多年前见过的几个海归回来的人在面试别人),实际上都是在死抠这个private singleton() 实例化方法,用这个细节来说事儿。
------解决思路----------------------
单例模式是为共享资源而出现的,一般用于 context。即以数据流为主线的架构中
这样在处理流程中不需要显式的传递数据体
当然你可以声明一个全局对象来包装公共资源
------解决思路----------------------
全局变量:配置、用户登录信息、
全局函数:工具类、数据库连接、网络连接等
------解决思路----------------------
单例模式,至少有这么一个应用场景对于在整个软件生命期内不会发生变化而有频繁使用的东东(比如config配置项),可以采用单例模式缓存起来,减少使用时对config的检索。