设计模式之单例模式

单例模式(Singleton)

定义

保证一个类仅有一个实例,并提供一个全局访问点。

使用场景

当你希望整个系统运行期间某个类只有一个实例时候

示例代码

双重检查

public class Singleton1 {
    private Singleton1() { }
    private static volatile Singleton1 instance;
    public static Singleton1 getInstance() {
        // 第一重检查 为了提高性能
        if (instance == null) {
            synchronized (Singleton1.class){
                // 第二重检查 保证线程安全
                if (instance == null) {
                    instance = new Singleton1();
                }
            }
        }
        return instance;
    }

    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
        Singleton1 instance1 = Singleton1.getInstance();
        System.out.println("instance1 = " + instance1);
        // 通过反序列化破坏
        Singleton1 instance2 = JSON.parseObject(JSON.toJSONString(instance1), Singleton1.class);
        System.out.println("instance2 = " + instance2);
        // 通过反射破坏
        Constructor<Singleton1> constructor = Singleton1.class.getDeclaredConstructor();
        constructor.setAccessible(true);
        Singleton1 instance3 = constructor.newInstance();
        System.out.println("instance3 = " + instance3);
    }
}

静态内部类

public class Singleton5 {
    private Singleton5() { }

    private static class SingletonInstance {
        private final static Singleton5 INSTANCE = new Singleton5();
    }

    public static Singleton5 getInstance() {
        return SingletonInstance.INSTANCE;
    }
}

静态内部类只有在加载的时候才会加载,且加载一次

枚举

public enum Singleton6 {
    INSTANCE;
}

除枚举外其他的都可以通过反射和反序列化破坏掉

相关推荐

  1. 【前端设计模式模式

    2024-03-10 16:16:01       42 阅读
  2. 设计模式模式

    2024-03-10 16:16:01       38 阅读
  3. C++设计模式模式

    2024-03-10 16:16:01       37 阅读
  4. 设计模式模式

    2024-03-10 16:16:01       36 阅读
  5. 设计模式模式

    2024-03-10 16:16:01       37 阅读
  6. 设计模式模式

    2024-03-10 16:16:01       33 阅读
  7. 【软件设计模式模式

    2024-03-10 16:16:01       34 阅读
  8. c++设计模式模式

    2024-03-10 16:16:01       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 16:16:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 16:16:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 16:16:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 16:16:01       18 阅读

热门阅读

  1. IntelliJ IDEA分支svn

    2024-03-10 16:16:01       28 阅读
  2. Linux运维_Bash脚本_编译安装GTK+-3.24.41

    2024-03-10 16:16:01       25 阅读
  3. Windows中毒应急方式

    2024-03-10 16:16:01       18 阅读
  4. c#开发100问?

    2024-03-10 16:16:01       23 阅读
  5. 初识C语言—结构体

    2024-03-10 16:16:01       21 阅读
  6. 教你用Android Studio如何打jar包与aar包

    2024-03-10 16:16:01       19 阅读
  7. 【大厂AI课学习笔记NO.70】GitHub,GitLab,CODING等

    2024-03-10 16:16:01       18 阅读
  8. 如何使用CSS样式化滚动条

    2024-03-10 16:16:01       22 阅读