单例模式

2018-01-28  本文已影响0人  吕志豪

定义 :确保某个类在系统中只有一个对象。
场景:访问IO和数据库资源等,要考虑单例。一个应用只有一个Application对象
关键点

public class Sington {
    private static Sington  sington=new Sington();
    private Sington(){

    }
    public static Sington getSington(){
        return sington;
    }
}

第二种方式(懒汉),声明一个静态对象,只在第一次使用的时候进行初始化。

public class Sington {
    private static Sington  sington;
    private Sington(){
    }
    public static synchronized Sington getSington(){
        if (sington==null){
            return sington=new Sington();
        }
        return sington;
    }
}

优点:在使用时才进行初始化,使用之前不占资源
缺点:首次使用时,反应稍慢,每次调用都要同步,造成同步开销
第三种方式(DCL),在使用时才进行初始化,只有首次初始化期间,才会有同步开销


public class Sington {
    private static Sington sington = null;

    private Sington() {
    }

    public static Sington getSington() {
        if (sington == null) {//避免不必要的同步
            synchronized (Sington.class) {
                if (sington == null) {//防止解锁时,已有实例化对象
                    return sington=new Sington();
                }
            }
        }
        return sington;
    }
}

第四种方式(静态内部类单例模式),推荐

class Sington {
    public static Sington getInstance() {
        return SingtonHolder.sington;
    }

    private Sington() {
    }
    private static class SingtonHolder{
        private static final Sington sington=new Sington();
    }
}

第五种方式(枚举),超简单,反序列化还不会出错

public enum Sington {
   INSTENCE
}

缺点 :

上一篇下一篇

猜你喜欢

热点阅读