当前位置: 首页 > news >正文

单例模式解析

1.什么是单例模式

一种常用的软件设计模式,它确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。

2.单例模式存在原因

(1)确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例
(2)用于控制资源访问、管理共享资源(如配置文件、数据库连接等)或实现一个全局服务等多种场景。

3.如何实现一个单例模式

(1)私有构造方法
防止外部通过new关键字创建类的实例。
(2)私有静态实例
在类内部创建一个类的唯一实例,并将其声明为静态变量。
(3)公共静态方法
提供一个公共的静态方法,返回类的唯一实例,并在需要时创建这个实例。

4.具体方案:

懒汉式(线程不安全)

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

懒汉式(线程安全)

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

双重检查锁定(Double-Checked Locking)

public class Singleton {  // volatile关键字确保多线程的可见性和禁止指令重排序  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;  }  
}

静态内部类

public class Singleton {  private Singleton() {}  private static class SingletonHolder {  private static final Singleton INSTANCE = new Singleton();  }  public static final Singleton getInstance() {  return SingletonHolder.INSTANCE;  }  
}

枚举

public enum Singleton {  INSTANCE;  public void whateverMethod() {  }  
}

http://www.mrgr.cn/news/23391.html

相关文章:

  • 【SAP-ABAP】JAVA通过SAP JCO(SAP.JAR)链接SAP需要注意哪些事项(SAP ROUTER连接报错)
  • NVIDIA Triton Inference Server 部署 yolov5
  • 刘德华2024演唱会危险事故集锦
  • 一个3GPP协议上有关cell reselection priority的问题
  • 基于人类反馈的强化学习概述
  • 【FPGA数字信号处理】- FIR串行滤波器
  • 线性代数基础
  • 【学术会议征稿】第八届电气、机械与计算机工程国际学术会议(ICEMCE 2024)
  • 下载运行flutter(3.22.3)项目踩坑记录
  • 解决el-table排序sortable只排序当前页问题
  • 关于使用ABB机器人MoveJ或MoveL报错50050或者轴配置出错问题解决办法
  • SQL server 日常运维命令
  • ubuntu 22.04 编译安装新内核
  • 萱仔个人博客系列——创建一个新的文章
  • UE4_后期处理_后期处理材质及后期处理体积一
  • GD32E230程序烧录和开发环境使用介绍
  • 机器学习 第9章 聚类
  • 安装OpenResty(Linux-Docker)
  • 什么是话费充值api接口?话费充值API接口如何对接?
  • Linux下快速比较两个目录的不同,包括文件内容