JAVA单例模式

Posted 一只小小寄居蟹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA单例模式相关的知识,希望对你有一定的参考价值。

单例模式有两种设计:

  1. 延迟加载(懒汉式)
    • 私有构造方法
    • 创建本类对象,但不初始化
    • 创建静态方法进行初始化对象并返回
  2. 立即加载(饿汉式)
    • 私有构造方法
    • 创建本类的对象并初始化(私有的)
    • 创建静态方法获取本类对象

举例1.

/**
 * 延迟加载(懒汉式)
 *  1.私有构造方法
 *  2.创建本类对象,但不初始化
 *  3.创建静态方法进行初始化对象并返回
 *
 *  优点:
 *      使用到类的对象才会加载,不消耗内存
 *  缺点:
 *      可能会出现线程安全问题,但是可以使用同步代码块消除这个安全问题
 *
 */

public class SingleExample {

    private SingleExample(){}

    // 创建本类对象,不初始化
    private  static SingleExample instance ;

    private static  SingleExample getInstance(){
        if (instance == null) {
            // 同步代码块
            synchronized (SingleExample.class) {
                if (instance == null) {
                    instance = new SingleExample();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) {
        System.out.println("1." + SingleExample.getInstance());
        System.out.println("2." + SingleExample.getInstance());
        System.out.println("3." + SingleExample.getInstance());// 均是同一个对象,在同一个内存中
    }

}

 

 

举例2.

/**
 * 立即加载(饿汉式)
 *  1.私有构造方法
 *  2.创建本类的对象并初始化(私有的)
 *  3.创建静态方法获取本类对象
 *
 *  优点:
 *      保证的线程的安全,没有线程安全问题
 *  缺点:
 *      使用类就会加载,比较消耗内存
 */
public class ImmediateSingle {

    private ImmediateSingle(){}

    private static ImmediateSingle instance = new ImmediateSingle();

    public static ImmediateSingle getInstance(){
        return instance;
    }
}

 

以上是关于JAVA单例模式的主要内容,如果未能解决你的问题,请参考以下文章

java 单例模式这个要怎么理解?

Java中的单例模式

Java设计模式--单例模式(代码详解懒汉饿汉模式)

Java设计模式之单例模式

Java 设计模式——单例模式 理论代码相结合

常用代码片段