设计模式之单例模式浅析

常用的单例模式:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式。
1、饿汉模式

public class Singleton1 {

    //类加载时就实例化
    private static Singleton1 singleton1 = new Singleton1();

    //私有的构造方法
    private Singleton1() {
    }

    //以自己实例为返回值的的公有方法
    public static Singleton1 getInstance(){
        return singleton1;
    }

}

优点:方法简单,线程安全;
缺点:在类加载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终没有使用过这个实例,则会造成内存的浪费。
2、懒汉模式

public class Singleton2 {

    private static Singleton2 INSTANCE;

    //私有的构造方法
    private Singleton2() {
    }

    public static Singleton2 getInstance() {
        //被动创建,在真正需要使用时才去创建
        if (INSTANCE == null) {
            INSTANCE = new Singleton2();
        }
        return INSTANCE;
    }

}

优点:实现Lazy Loading;
缺点:多线程下线程不安全。
3、双重锁懒汉模式

public class Singleton3 {

    private static volatile Singleton3 INSTANCE;

    //私有的构造方法
    private Singleton3() {
    }

    public static Singleton3 getInstance() {
        //第一次校验 先判断是否存在,不存在再加锁处理
        if (INSTANCE == null) {
            synchronized (Singleton4.class) {
                //第二次校验
                if (INSTANCE == null) {
                    INSTANCE = new Singleton3();
                }
            }
        }
        return INSTANCE;
    }
}

优点:实现Lazy Loading,节约内存空间,保证线程安全。
缺点:依赖JDK版本(JDK1.5)。
4、静态内部类模式

public class Singleton4 {

    //私有的构造方法
    private Singleton4() {
    }

    private static class SingletonHoler{
        private static Singleton4 INSTANCE = new Singleton4();
    }

    public static Singleton4 getInstance(){
        return SingletonHoler.INSTANCE;
    }
}

优点:实现Lazy Loading,节约内存空间;线程安全。
缺点:无法传参。
5、枚举模式

public enum Singleton5 {
    INSTANCE;
    //变量
    //方法
}

优点:方法简单,线程安全

参考:双重校验锁实现单例模式
深入理解单例模式:静态内部类单例原理

你可能感兴趣的:(Java,设计模式,java,设计模式)