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

单例模式解析

时间:2024-09-10 15:49:43浏览次数:13  
标签:Singleton 模式 instance 实例 static private 单例 解析 public

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() {  
    }  
}

标签:Singleton,模式,instance,实例,static,private,单例,解析,public
From: https://blog.csdn.net/weixin_46624670/article/details/142078743

相关文章

  • python装饰器模式实现切面功能
    引言在软件开发中,我们经常会遇到一些横切关注点(cross-cuttingconcerns),如日志记录、事务管理、安全性检查等,这些关注点通常会跨越多个模块。传统的编程方式会导致代码的重复和分散,难以维护。面向切面编程(AOP)是一种编程范式,它通过提供一种新的方式来模块化横切关注点,从而提高代码......
  • raw.githubusercontent.com未能解析” 解决方案
    1.操作场景通过windows11powershell下载依赖包2.报错信息如下irm:未能解析此远程名称:'raw.githubusercontent.com'所在位置行:1字符:27+&([scriptblock]::Create((irm"https://win11debloat.raphi.re/")))+~~~~~~~~~~~~~~~~~~~~~~~~......
  • “Interface 和 Type 区别”深度解析
    “Interface和Type区别”深度解析文章目录一、Interface和Type是什么二、如何使用Interface和Type1.定义Interface2.定义Type3.使用Interface和Type4.区别与联系三、Interface和Type二者有哪些区别,分别在哪些场景使用1.区别2.场景......
  • 第J3周:DenseNet算法实战与解析(TensorFlow版)
    >-**......
  • 论文解析二: SuperGlue 同时进行特征匹配以及滤除外点的网络
    目录1.SuperGlue摘要2.SuperGlue网络结构2.1AttentionalGraphNeuralNetwork(注意图神经网络)2.1.1KeyPointEncoder:解决同时进行特征匹配以及滤除外点的网络2.1.2AttentionalAggregation2.2OptimalMatchingLayer(最优匹配层)2.3损失函数3.整体代码详解......
  • JavaScript之模块模式
    一模块模式JavaScript模块模式有传统的立即调用函数表达式(IIFE)、CommonJS、AMD、ES6模块立即调用函数表达式(IIFE)立即调用函数表达式(IIFE)是一种设计模式,通过创建一个立即执行的函数来封装代码,避免全局命名空间污染。IIFE结构如下:(function(){//你的代码})(......
  • java常见的设计模式
    java常见的设计模式1.什么是设计模式?设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码......
  • GB28181规范中broadcast和talk模式实际场景时间差别在哪里?
    好多开发者对GB28181规范里面,broadcast和talk模式区分不清,今天借此机会,针对GB28181标准中的Broadcast(广播)和Talk(对讲)是两种不同的通信模式,它们在视频监控系统中扮演着不同的角色,做个基础的扫盲,二者具有以下区别:1.功能和用途Broadcast(广播): 功能:主要用于平台侧向设备侧发送单向的通......
  • 订单重复提交掉单问题硬解析(初级程序员毕业门槛)
    解决支付订单,重复提交问题!-CSDN博客  (这是原文章地址)这篇文章其实写得挺好,近期我因工作需要,去修改了别人设计的订单系列接口,和文章中的结构类似,当然没有文章中设计得那么全面(实际工作中的代码都这样,特别是中小公司)那这篇文章已经写很好了,我写啥?两点:1,宏观......
  • 几种并发模式的实现
    常见的几个需要并发的场景,具体的实现方式asyncio异步并发importasyncioasyncdeftask(id,delay):awaitasyncio.sleep(delay)returnf"Task{id}completed"asyncdefmain():tasks=[task(1,2),task(2,1),task(3,3)]done,pending=await......