单例模式

来源:互联网 发布:广东话seo是什么意思 编辑:程序博客网 时间:2024/06/10 19:50

单例模式:当整个系统只需要一个实例对象时采用单例模式。
一开始加载类时就new MyClass()是饿汉式,当为null时才new MyClass()是懒汉式
非线程安全:

public class MyClass{    private static MyClass instance;    private MyClass(){    }    public static MyClass getInstance(){        if(instance == null)            instance = new MyClass();        return instance;    }}

线程安全:

public class MyClass{    private static MyClass instance;    private MyClass(){    }    public static synchronized MyClass getInstance(){        if(instance == null)            instance = new MyClass();        return instance;    }}
public class MyClass{ //饿汉式    private static MyClass instance = new MyClass(); //类加载时完成初始化,jvm只分配一次,所有实例共享该静态变量    private MyClass(){    }    public static MyClass getInstance(){        return instance;    }}
public class MyClass{    private volatile static MyClass instance; //保证可见性    private MyClass(){    }    public static  MyClass getInstance(){        if(instance == null){             synchronized(MyClass.class){ //对类进行同步,在new MyClass之前再检查一下是否为空                if(instance == null){                    instance = new MyClass();                }            }        }        return instance;    }}

单元素的枚举类型:

public Enum MyClass{    INSTANCE;//定义一个枚举元素,就相当是定义一个MyClass实例    public void printMsg(){    }}

调用方式:MyClass.INSTANCE.printMsg()

1.5以前的做法是:
public class MyClass{
private static final MyClass instance = new MyClass();

private MyClass(){}public static MyClass getInstance(){    return instance;}

}

对于单例的序列化,除了要implement serializable之外,所有域要声明为transient并提供readResolve方法(from Effective Java)

private Object readResolve(){    return instance;}
0 0
原创粉丝点击