概述
Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。
意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
例子
1.ASP.NET某应用程序对应的Application必须是唯一的。
2.不管在什么时候谈到地球,它都是指同一个地球。
3.某全局计数器对象是必须是唯一的,否则会使计数失败。
UML类图
代码:对应UML类图
1
}
1
}
代码:六种实现方式
1.最简单的实现,但不支持线程安全
1
}
2.支持线程安全,但是不支持多线程的并发操作
1
}
3.支持线程安全,使用双检查(Double Check),支持多线程的并发操作
1
}
4.使用静态初始化方式,但不支持缓实例化
1
}
5.使用静态初始化方式,且支持缓实例化,但引入了附加类
1
6.使用静态初始化方式,且支持缓实例化,实际使用时首选
1
}
代码:完整例子
实现简单计数功能
1
}
1
}
1
}
总结
单件模式提供非常好的机制保证,实例唯一且有全局唯一访问点。
源代码:[下载]
参考
1. 【dofactory】ttp://www.dofactory.com/Patterns/Patterns.aspx#list
2. 【Terrylee】http://www.cnblogs.com/Terrylee/archive/2006/07/17/334911.html
3. 【卢振宇老师】http://zhenyulu.cnblogs.com/category/6930.html