单例模式

饿汉

public class Singleton {
    private  static final  Singleton instance = new Singleton();
    private Singleton(){};
    public static Singleton getInstance() {
        return instance;
    }
}

双检索

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

枚举

根据枚举的实现原理是是继承enum接口的类,每个元素是static final的,所以枚举实现单例是线程安全的

public enum Singleton {
  INSTANCE;
}

包含信息

public enum Singleton {
    INSTANCE;
    private Resource instance;
    Singleton() {
        instance = new Resource();
    }
    public Resource getInstance() {
        return instance;
    }
}

静态内部类

静态内部类被调用时才被虚拟机加载,属于懒加载。缺点是加载class文件的时候需要额外消耗一点时间

class Singleton {
    private Singleton() {
        System.out.println("singleton create");
    }
    private static class InstanceHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance() {
        return InstanceHolder.INSTANCE;
    }
}

测试

public class Singleton {
    private Singleton() {
        System.out.println("singleton create");
    }
    private static class InstanceHolder {
        private static final Singleton INSTANCE = new Singleton();
        static{
            System.out.println(1);
        }
    }
    public static Singleton getInstance() {
        return InstanceHolder.INSTANCE;
    }
    public static void main(String ...arg){
        Singleton s = new Singleton();
        //Singleton.getInstance();
    }
}
//输出singleton create
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 4,291评论 4 34
  • 1 场景问题# 1.1 读取配置文件的内容## 考虑这样一个应用,读取配置文件的内容。 很多应用项目,都有与应用相...
    七寸知架构阅读 6,880评论 12 68
  • 单例模式(Singleton Pattern)是 编程语言中最简单的设计模式之一。这种类型的设计模式属于创建型模式...
    Hi夜城阅读 463评论 1 10
  • 一.什么是单例模式 单例模式的定义:确保一个类只有一个实例,并提供一个访问他的全局访问点。单例模式是几个设计模式中...
    Geeks_Liu阅读 2,241评论 0 10
  • 概念 确保某一个类只有一个实例,而且自行实例化,并向整个系统提供一个访问它的全局访问点,这个类称为单例类。 特性 ...
    野狗子嗷嗷嗷阅读 558评论 0 2