首页 > 代码库 > 单例模式的几种写法

单例模式的几种写法

懒汉式 饿汉式就不多说了 体会代码  都不能防止反射机制攻击和反序列化 

public class Singleton {    private static final Singleton MYINSTANCE = new Singleton();    private Singleton() {        super();    }    public static Singleton getInstance() {        return MYINSTANCE; }
}
/* * 饿汉式单例模式 线程安全 但是不能防止反射攻击 序列化会重新创建一个对象 */
public class Singleton2 {    public static final Singleton2 MYINSTANCE= new Singleton2();    private Singleton2() {        super();    }}/* * 饿汉式单例模式第二种写法  */
public class Singleton3 {    private static Singleton3 mySinglenton;    private Singleton3() {        super();    };    public synchronized static Singleton3 getInstance() {        return mySinglenton == null ? new Singleton3() : mySinglenton;    }}/* * 懒汉单例模式 没有对象才造一个 
* 不能防止java的反射攻击 java反射机制可以构造私有化的构造方法 线程不安全 可能存在两个以上线程同时判断引用为空 * 可以加锁解决
*/

还有《高效java编程》中写的枚举式单例模式  线程安全 还能防止反射攻击 对应的开销也会加大 

体会代码

public enum Singleton4 {    INSTANCE;    public Singleton4 getInstance() {        return INSTANCE;    }}

还有种注册登记机制 用的还是饿汉式 只是构建了一个map map里没有写入map一个实例 适合大量单例模式

综上一般写饿汉式肯定没问题 需要序列化对象时再用枚举式的  以上 

单例模式的几种写法