单例模式是一中常见的设计模式,使用它要满足以下条件:
第一 : 系统中只要求有一个实例。
第二 : 这个实例必须有单例类自己提供。
在JAVA中的单例设计模式有两种形式:可分为饿汉式单例和懒汉式单例。
1 饿汉式单例
java 代码
- public class Singlon{
- private static Singlon instance = new Singlon();
- private Singlon(){
- }
- public static Singlon getInstance(){
- return instance ;
- }
- }
2 懒汉式单例
java 代码
- public class Singlon{
- private static Singlon instance = null;
- private Singlon(){
- }
- synchronized public static Singlon getInstance(){
- if(instance==null){
- instance = new Singlon();
- }
- return instance ;
- }
- }
无论是哪种单例都不能继承,因为它们的构造器是私有的。而对于饿汉式单例来说是在类刚被加载后就初始化的,而懒汉式是在静态方法里进行初始化。从资源利用的角度来说,懒汉式可能好点,但是就时间方面考虑饿汉式好点。GOF将单例设计模式设计为了懒汉式,那是因为C++中类的静态初始化和类加载的顺序不固定。不过要利用好单例也不是件容易的事情,因为在设计到多线程共享的情况下,只有一个实例可能造成性能和安全方面的种种问题。因此要用单例也要从综合方面考虑。