首页 > 其他分享 >单例模式

单例模式

时间:2024-07-30 19:50:23浏览次数:15  
标签:Singleton 单例 private instance 实例 模式 key

类只实例化一次,即在服务中只有一个实例。

 

1、使用场景

节省内存空间,比如配置信息类;

单例模式可以用来管理一些共享资源,比如数据库连接池,线程池;

解决资源冲突问题,比如日志打印。

2、实现方式

2.1 饿汉(线程安全)

初始化时就创建实例

2.2 懒汉(线程不安全)

需要时才创建实例

2.3 注解@PostConstruct(饿汉)

直接在init()方法上添加注解,该方法会在加载完依赖后执行,且只执行一次。

2.4 静态内部类

 

2.5 双重检查锁实现单例(懒汉)

在双重检查锁定的实现中,synchronized通常不会使用this作为锁对象,而是使用类对象作为锁。因为在这种情况下,我们通常希望在类级别而不是实例级别进行同步。

public class Singleton{

  // 多线程可见的实例变量
  private volatile Singleton instance;
  
  private Singleton () {}
  

    private  Singleton getSingleton() throws Exception {
        if (null == instance) {
            synchronized (Singleton.class) {
                if (null == instance) {
                    sss = new Singleton();
                }
            }
        }
        return instance;
    }

}

2.6 容器实现

严格不算单例模式,因为实现的是如何管理类对象,而不是如何创建单个对象 

public class SingletonManager { 
  private static Map<String, Object> objMap = new HashMap<String,Object>();
  private Singleton() { 
  }
  public static void registerService(String key, Objectinstance) {
    if (!objMap.containsKey(key) ) {
      objMap.put(key, instance) ;
    }
  }
  public static ObjectgetService(String key) {
    return objMap.get(key) ;
  }
} 

参考资料:

https://www.cnblogs.com/codeshell/p/14177102.html

https://blog.csdn.net/itachi85/article/details/50510124

https://poltora.info/blog/all-you-want-to-know-about-singleton/

 

标签:Singleton,单例,private,instance,实例,模式,key
From: https://www.cnblogs.com/zhegemaw/p/18333241

相关文章

  • 我无法插入背景图像、进入全屏模式并关闭以前的窗口
    我正在编写一个根据该算法工作的程序(也就是说,当您单击某些按钮时,会出现另一个窗口或带有结果的最终窗口,并且当您单击按钮时应该从Toplevel(opennewwindow(1))出现另一个窗口)我编写了这个程序的基本代码,但我未能在所有窗口上插入背景图像,以及为所有窗口设置全屏模式并关闭以前的......
  • chapter3------保护模式之特权级转移
    特权级特权级总共有4个级别,数字越小表示的特权级越大CPL-CurrentPrivilegeLevel(当前特权级):用于指示处理器当前运行的特权级别DPL-DescriptorPrivilegeLevel(描述符特权级):用于指示段描述符或门描述符的特权级别。每个段描述符或门描述符都有一个DPL字段,它决定了访问该......
  • 使用Seata XA模式的全局事务管理在SpringCloud电商订单系统中的应用
    在开发电商系统的过程中,订单创建是一项非常关键的功能。本文将介绍如何在订单创建过程中,结合SpringCloud和Seata的XA模式来实现全局事务管理,以确保数据的一致性和完整性。订单创建过程详解在这段代码中,我们通过@GlobalTransactional注解来声明一个全局事务。以下是具体的......
  • 探索S2B2b2C模式下的用户数字化运营新纪元
    在数字化浪潮的汹涌澎湃中,S2B2b2C模式作为用户关系管理的新兴形态,正逐步展现出其独特的魅力和潜力。这一模式不仅超越了传统的D2C直接面向消费者的运营方式,更在复杂多变的商业生态中,构建了一个高效协同、价值共创的生态系统。S2B2b2C:数字化运营的全新版图S2B2b2C,即供应链平台到......
  • 建造者模式读取数据
    突然想起Asp.Net启动项目的建造者写法非常优秀,所以让自己的代码看起来高级,美观,优雅。我模拟一个场景使用它直接上代码publicclassTestQuery{publicstaticvoidMain(){QueryableBuilderqueryableBuilder=newQueryableBuilder();......
  • PHP单例模式详解及应用
    本文由ChatMoney团队出品在PHP开发中,我们经常会遇到一些对象需要在整个应用程序中共享的情况。例如,数据库连接、缓存等资源。这时候,我们可以使用单例模式来确保这些资源只被创建一次,并且在程序的任何地方都可以访问到。什么是单例模式?单例模式(SingletonPattern)是一种设计模......
  • 线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析
    机器学习之线性回归和逻辑回归1.简介1.1机器学习概述1.2监督学习的定义与重要性1.3线性回归和逻辑回归在监督学习中的作用1.3.1线性回归1.3.2逻辑回归2.线性回归(LinearRegression)2.1定义与目标2.1.1回归问题的定义2.1.2预测连续目标变量2.2模型概述2.2.1......
  • Java代理模式详解
    Java代理模式详解概念代理模式是一种设计模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。在Java中,代理模式主要分为静态代理和动态代理。静态代理静态......
  • 为列表中的不同 JSON 模式模型定义约束
    我有一些JSON,其结构类似于下图所示。threshold列表表示类型可以是"type":"upper_limit"或"type":"range"的对象。请注意,"target"值应该是整数或浮点数,具体取决于对象的类型。{"name":"blah","......
  • 【新手|非常简单】VMWare在NAT模式下为Centos7虚拟机配置静态IP
    检查VMWare的网络设置点击VMWare菜单栏中的“编辑”,点击“虚拟网络编辑器”检查一下NAT模式那一条,和我这里的设置是不是一样的(IP可能会不一样),我这里的设置是默认设置。如果不确定,可以点击“还原默认设置”。(你也可以尝试按着截图中的设置调)检查虚拟机的网络连接右键虚拟机,......