单例模式

饿汉

public class SingleTon1 {
    
    private String name = "饿汉式";
    
    private SingleTon1(){
        System.out.println(name);
    }
    
    private static SingleTon1 singleton = new SingleTon1();
    
    public static SingleTon1 getInstance(){
        
        return singleton;
        
    }

}

懒汉

public class SingleTon2 {
    
    private String name  = "懒汉式";
    
    private SingleTon2(){
        System.out.println(name);
    }
    
    static {
        single = new SingleTon2();
    }
    
    private static SingleTon2 single;

    public static SingleTon2 getInstance(){
        
        if( null == single){
            
            single = new SingleTon2();
        }
        return single;
    }
}

静态内部

public class SingleTon3 {
    
    private String name = "静态内部类";
    
    private SingleTon3(){
        System.out.println(name);
    }

    private static class MySingleTon3{
        
        private static final SingleTon3 sing = new SingleTon3();
        
    }
    
    public static SingleTon3 getInstance(){
        return MySingleTon3.sing;
    }
}

双重检验

public class SingleTon4 {

    private String name = "双重检验";

    private SingleTon4() {
        System.out.println(name);
    }

    private static SingleTon4 sing4;

    public static SingleTon4 getInstance() {
        if (null == sing4) {
            synchronized (SingleTon4.class) {
                if (null == sing4) {
                    sing4 = new SingleTon4();
                }
            }
        }
        return sing4;
    }

}

 

posted on 2018-09-30 14:47  _CodeMan  阅读(123)  评论(0)    收藏  举报

导航