单例模式

最近面试问别人单例模式,结果发现自己对单例模式也是一知半解  所以这边记录一下

    单例模式     简单来说的意思就是   我们使用的对象及实例化  都是同一对象

    引用另一个文章的代码http://www.importnew.com/18872.html

饿汉模式

    

public class Singleton {   
    private static Singleton = new Singleton();
    private Singleton() {}
    public static getSignleton(){
        return singleton;
    }
}

这种做法不的缺点是:我们第一次实例化该单例的时候   不管我们是否需要  他都会new  一个对象给我们

加入延时加载 懒汉模式

  

public class Singleton {
    private static Singleton singleton = null;
    private Singleton(){}
    public static Singleton getSingleton() {
        if(singleton == null) singleton = new Singleton();
        return singleton;
    }
}

但是这种方法  是线程不安全的的

加锁

  

public class Singleton {
    private static volatile Singleton singleton = null;

    private Singleton(){}

    public static Singleton getSingleton(){
        synchronized (Singleton.class){
            if(singleton == null){
                singleton = new Singleton();
            }
        }
        return singleton;
    }    
}

这种做法的话 效率又太低    

volatile    修饰符可以看这篇文章http://www.importnew.com/24082.html

加入双重锁

  

public class Singleton {
    private static volatile Singleton singleton = null;

    private Singleton(){}

    public static Singleton getSingleton(){
        if(singleton == null){
            synchronized (Singleton.class){
                if(singleton == null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }    
}

内部静态类

  

public class Singleton {
    private static class Holder {
        private static Singleton singleton = new Singleton();
    }

    private Singleton(){}

    public static Singleton getSingleton(){
        return Holder.singleton;
    }
}

枚举写法

public enum Singleton {
    INSTANCE;
    private String name;
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name = name;
    }
}

 

posted @ 2018-04-12 14:21  Kapa  阅读(123)  评论(0编辑  收藏  举报