单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 1、单例类只能有一个实例。
  • 2、单例类必须自己创建自己的唯一实例。
  • 3、单例类必须给所有其他对象提供这一实例。
/**
 * 饿汉式单例
 * 线程安全,推荐使用
 * 唯一缺点: 系统初始化就加载,如果没有使用也会加载浪费内存
 */
public class Singleton {
    public static final Singleton INSTANCE = new Singleton();
    private Singleton(){
    }
    public static Singleton getInstance() {
        return INSTANCE;
    }
}

 

/**
 * 懒汉式单例
 * 虽然达到按需初始化的目的,但是线程不安全
 */
public class Singleton {
    private static Singleton INSTANCE;
    private Singleton(){
    }
    public static Singleton getInstance() {
        if (INSTANCE == null) {
            return new Singleton();
        }
        return INSTANCE;
    }
}

 

/**
 * 懒汉式单例(方法加锁)
 * 虽然线程安全,但是效率降低
 */
public class Singleton {
    private static Singleton INSTANCE;
    private Singleton(){
    }
    public synchronized static Singleton getInstance() {
        if (INSTANCE == null) {
            return new Singleton();
        }
        return INSTANCE;
    }
}

 

/**
 * 懒汉式单例(双重检查单例写法)
 * 比较完美的一种写法
 */
public class Singleton {
    private static Singleton INSTANCE;
    private Singleton(){
    }
    public static Singleton getInstance() {
        if (INSTANCE == null) {
            synchronized (Singleton.class) {\
                if (INSTANCE == null) {
                    INSTANCE = new Singleton();
                }
            }
        }
        return INSTANCE;
    }
}

 

/**
 * 静态内部类方式
 * JVM保证单例
 * 在加载外部类时不会加载内部类,这样可以实现懒加载
 * 完美的一种写法
 */
public class Singleton {
    private Singleton(){
    }
    private static class SingletonHolder{
        private final static Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

 

/**
 * 枚举方式
 * 不仅保证线程安全,还可以防止反序列化
 */
public enum Singleton {
    INSTANCE;
}

 

posted @ 2020-10-22 09:20  一柒微笑  阅读(100)  评论(0编辑  收藏  举报