1. 程式人生 > >五種單例模式

五種單例模式

1、餓漢式

public class SingletonHungry {
    private SingletonHungry () {
    }
    private static SingletonHungry singletonHungry = new SingletonHungry();
    public static SingletonHungry getInstance(){
        return singletonHungry;
    }
}

2、懶漢式

public class SingletonLazy {
    private static SingletonLazy singletonLazy;
    private
SingletonLazy () { /** * 防止被反射強行建立例項 */ if(singletonLazy != null) { throw new UnsupportedOperationException("SingletonLazy was created!"); } } public static SingletonLazy getInstance() { if(singletonLazy == null) { try { singletonLazy = new
SingletonLazy(); return singletonLazy; } catch (Exception e) { e.printStackTrace(); } } return singletonLazy; } }

3、雙鎖

public class SingletonLock {
    private static SingletonLock singletonLock;
    private SingletonLock
() { } public static SingletonLock getInstance() { if(singletonLock == null) { synchronized (SingletonLock.class) { if(singletonLock == null) { singletonLock = new SingletonLock(); return singletonLock; } } } return singletonLock; } }

4、內部類

public class SingletonInner {
    private SingletonInner() {
        if (Holder.INSTANCE != null) {
            throw new UnsupportedOperationException("INSTANCE was created!");
        }
    }
    static class Holder {
        private static SingletonInner INSTANCE = new SingletonInner();
    }
    public static SingletonInner getInstance() {
        return Holder.INSTANCE;
    }
}

5、列舉

public enum SingletonEnum{
    INSTANCE;
}