Java的单例模式
开发工具与关键技术: MyEclipse 10、Java语法
作者:邓婵
撰写时间:2019年 5月 23日
单例模式主要是保证一个类在内存中对象的唯一性。
比如:多程序读取一个配置文件时,建议配置文件封装成对象。会方便操作其中数据,又要保证多个程序读到的 是同一个配置文件对象,就需要该配置文件对象在内存中是唯一的。
单例模式适用于:
- 需要生成唯一序列的环境。
- 需要频繁实例化然后销毁的对象。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- 方便资源相互通信的环境。
一、饿汉式单例:当我一启动这个类的时候,它就把自身实例化出来。
特点:线程安全,调用效率高,但是不能延时加载。
步骤:1、私有化构造器,使得外部无法调用2.实例化这个类,也就是实例自身,隐藏的静态的自身的一个实例3.创建静态工厂方法,让外部可以获取实例。
相关代码如图下:
二、懒汉式单例:
特点:线程安全,调用效率不高,但是能延时加载。
步骤:1.私有化构造器2.创建一个私有的静态的实例来存放自身,但并不实例出来3.创建静态工厂方法,让外部可以获取实例。
相关代码如图下所示:
三、Double CheckLock实现单例:
Double CheckLock也就是双重锁判断机制(由于JVM底层模型原因,偶尔会出问题,不建议使用),是在懒汉式单例上发展而来。
四、静态内部类模式实现单例:
特点:线程安全,调用效率高,可以延时加载
步骤:1.私有化构造器2.在外部类写一个私有静态内部类,在内部类里面写一个静态变量,这个静态变量是外部那个类的对象,是用外部类作为类型,定义一个实例new的一个对象3.创建静态工厂方法,返回静态内部类中的成员变量。
相关代码可参考图下:
五、枚举类实现单例:
特点:线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用
相关代码如图下所示: