单例模式的几种写法

Posted BUGDOG

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的几种写法相关的知识,希望对你有一定的参考价值。

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

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一个实例 适合大量单例模式

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

以上是关于单例模式的几种写法的主要内容,如果未能解决你的问题,请参考以下文章

单例模式的几种写法

设计模式之单例模式的几种写法——java

单例模式的几种写法的差异

单例模式的几种写法

单例模式的几种写法

单例模式:Java单例模式的几种写法及它们的优缺点