设计模式-单例模式

110 阅读1分钟

懒汉式

class Singleton1 {
    private Singleton1() {
    }

    private static final Singleton1 singleton1 = new Singleton1();

    public static Singleton1 getInstance() {
        return singleton1;
    }

    public void say() {
        System.out.println("hi");
    }
}

饿汉式

class Singleton4 {
    private Singleton4() {
    }

    private static Singleton4 instance;


    public static synchronized Singleton4 getInstance() {
        if (instance == null) {
            instance = new Singleton4();
        }
        return instance;
    }

    public void say() {
        System.out.println("hi");
    }
}

双重检查锁模式(DCL)

class Singleton5 {
    private Singleton5() {
    }

    private static volatile Singleton5 instance;
    
    public static Singleton5 getInstance() {
        if (instance == null) {
            synchronized (Singleton5.class) {
                if (instance == null) {
                    instance = new Singleton5();
                }
            }
        }
        return instance;
    }

    public void say() {
        System.out.println("hi");
    }
}

静态内部类

class Singleton2 {
    private Singleton2() {
    }

    private static class Singleton2Holder {
        private static final Singleton2 singleton2 = new Singleton2();
    }


    public static Singleton2 getInstance() {
        return Singleton2Holder.singleton2;
    }

    public void say() {
        System.out.println("hi");
    }
}

枚举类

class Singleton6 {
    private Singleton6() {
    }

    public enum SingletonEnum6 {
        INSTANCE;
        private Singleton6 instance;

        SingletonEnum6() {
            instance = new Singleton6();
        }

        public Singleton6 getInstance() {
            return instance;
        }
    }

    public void say() {
        System.out.println("hi");
    }
}