Singleton 模式详解

来源:互联网 发布:剑三成男大叔脸型数据 编辑:程序博客网 时间:2024/06/11 18:59

 Singleton 模式详解

下面是我们常见的Singleton的写法

 package example.designmodel.singleton;public class Singleton1 {        private static Singleton1 instance;    public Singleton1(){            }    public static Singleton1 getinstance(){        if(instance == null){            instance = new Singleton1();        }            return instance;            }}


//problem ... 多个地方去调用getinstance的时候会出问题。还是会多创建instance。于是有个Singleton2

public class Singleton2 {        private static Singleton2 instance;    public Singleton2(){            }    public static synchronized Singleton2 getinstance(){        if(instance == null){            instance = new Singleton2();        }            return instance;            }}


//problem ... 一次只有一个可以调用getinstance,性能不是特别好,其实只有第一次需要同步,后面的调用都同步是一种累赘。于是有个Singleton3

public class Singleton3 {        private static Singleton3 instance = new Singleton3();    public Singleton3(){            }    public static  Singleton3 getinstance(){            return instance;    }}


//problem ... eagerly create急切创建实例 .如果您仍然关心性能,可使用Singleton4

package example.designmodel.singleton;public class Singleton4 {        private volatile static Singleton4 instance;    public Singleton4(){            }    public static  Singleton4 getinstance(){        if(instance == null){            synchronized(Singleton4.class){                if(instance == null){                    instance = new Singleton4();                }            }        }            return instance;    }}


//problem ... 双重加锁 JDK5以后适用。这里使用volatile标识,双重加锁

 

 

 


原创粉丝点击