单例模式几种实现方法

设计模式之单例模式(七种方法超详细) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象,也就是说不能使用new关键字来创建对象。 阅读详情
JAVA单例模式的几种实现方法
1.饿汉式单例类
package pattern.singleton;
//饿汉式单例类.在类初始化时,已经自行实例化 
public class Singleton1 {
    //私有的默认构造子
    private Singleton1() {}
    //已经自行实例化 
    private static final Singleton1 single = new Singleton1();
    //静态工厂方法 
    public static Singleton1 getInstance() {
        return single;
    }
}

2.懒汉式单例类
package pattern.singleton;
//懒汉式单例类.在第一次调用的时候实例化 
public class Singleton2 {
    //私有的默认构造子
    private Singleton2() {}
    
    //注意,这里没有final    
    private static Singleton2 single;
    
    //只实例化一次
    static{
        single = new Singleton2();
    }
    
    //静态工厂方法 
    public synchronized  static Singleton2 getInstance() {
         if (single == null) {  
             single = new Singleton2();
         }  
        return single;
    }
}


        在上面给出懒汉式单例类实现里对静态工厂方法使用了同步化,以处理多线程环境。有些设计师在这里建议使用所谓的"双重检查成例".必须指出的是,"双重检查成例"不可以在Java 语言中使用。不十分熟悉的读者,可以看看后面给出的小节。 同样,由于构造子是私有的,因此,此类不能被继承。饿汉式单例类在自己被加载时就将自己实例化。即便加载器是静态的,在饿汉式单例类被加载时仍会将自己实例化。单从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,则比懒汉式单例类稍好些。然而,懒汉式单例类在实例化时,必须处 
理好在多个线程同时首次引用此类时的访问限制问题,特别是当单例类作为资源控制器,在实例化时必然涉及资源初始化,而资源初始化很有可能耗费时间。这意味着出现多线程同时首次引用此类的机率变得较大。 
  饿汉式单例类可以在Java 语言内实现, 但不易在C++ 内实现,因为静态初始化在C++ 里没有固定的顺序,因而静态的m_instance 变量的初始化与类的加载顺序没有保证,可能会出问题。这就是为什么GoF 在提出单例类的概念时,举的例子是懒汉式的。他们的书影响之大,以致Java 语言中单例类的例子也大多是懒汉式的。实际上,本书认为饿汉式单例类更符合Java 语言本身的特点。


3.登记式单例类.
package pattern.singleton;


import java.util.HashMap;
import java.util.Map;


//登记式单例类.
//类似Spring里面的方法,将类名注册,下次从里面直接获取。


public class Singleton3 {
    private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
    static{
        Singleton3 single = new Singleton3();
        map.put(single.getClass().getName(), single);
    }
    
    //保护的默认构造子
    protected Singleton3(){}
    
    //静态工厂方法,返还此类惟一的实例
    public static Singleton3 getInstance(String name) {
        if(name == null) {
            name = Singleton3.class.getName();
            System.out.println("name == null"+"--->name="+name);
        }
        if(map.get(name) == null) {
            try {
                map.put(name, (Singleton3) Class.forName(name).newInstance());
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        return map.get(name);
    }
    
    //一个示意性的商业方法
    public String about() {    
        return "Hello, I am RegSingleton.";    
    }    
    public static void main(String[] args) {
        Singleton3 single3 = Singleton3.getInstance(null);
        System.out.println(single3.about());
    }
}


在 SAP 世界里拥抱非 SAP 技术:一名 ABAP 开发者的成长路径与实战方法论 那段时间非常煎熬,但它带来的回报也很真实:你会更尊重“可观测性”的价值,也会更愿意在 SAP 场景里把日志、追踪、断言、隔离测试做扎实。解决这类问题,靠的并不是某个神奇的 SAP 函数,而是跨栈的工程设计:接口要有业务幂等键,SAP 侧要有落库与锁策略,返回要有可识别的状态码,异常要能回放,补偿要有可追踪的工单或队列。这套体系吸引我的地方,在于它更贴近真实业务:客户要的往往不是“能打印”,而是“能规范地输出”,包括版式、字体、条码、二维码、电子签章位置、分页规则、多语言、合规水印、可回写的交互字段等。 阅读详情

相关推荐

从零到一:手把手教你用HFSS仿真60GHz圆极化磁电偶极子天线(附参数调优心得)

本文详细介绍了在HFSS中设计60GHz圆极化磁电偶极子天线的全流程,包括仿真环境搭建、参数化建模、收敛性优化和性能验证。通过系统化的参数扫描和优化策略,显著提升了天线的轴比带宽和增益性能,为毫米波通信应用提供了高效的天线设计解决方案。

weixin_42614269的博客 310

单例模式(八种方法分析)

所谓的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

can_meng_yun的博客 1067

Ubuntu22.04中通过conda快速部署PyTorch开发环境(CPU/GPU双版本实战)

本文详细介绍了在Ubuntu22.04系统中,如何利用Conda高效部署PyTorch开发环境。文章分别提供了CPU与GPU双版本的实战教程,涵盖环境创建、镜像加速、版本匹配及深度验证等关键步骤,旨在帮助开发者快速搭建稳定、兼容的深度学习环境,从而专注于模型开发。

rose2的博客 555

Groovy 快速入门

Groovy 语言 概述 简介 Groovy是用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言。使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行 Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 Groovy 与 Java 代码.

铠の魂博客 6483

体验灵雀云-创建基于Docker的云服务

今天体验了一下灵雀云,创建了第一个基于Docker的云服务。 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务。 首先需要选择一个镜像。灵雀云已经为您提供了一些常用的镜像列表。请在“常用镜像”列表中,选择“其它”,然后找到“alauda/hello-world”镜像,点击它右侧的“选择”按钮,进入服务参数配置页面。 选择完要创建的

tomcat的专栏 3233

CVPR2021 CenterPoint源码解读:从VoxelNet到两阶段优化的完整实现细节

本文深度解析了CVPR 2021 CenterPoint模型的完整实现细节,从VoxelNet体素化、稀疏卷积Backbone,到基于中心点的检测头与两阶段精修机制。文章提供了从环境搭建、数据预处理到核心代码模块(如热力图生成、关键点特征提取与MLP Refiner)的实战指南,并分享了训练策略、多任务损失调优及可视化调试等关键工程实践,助力开发者深入理解并复现这一高效的3D目标检测框架。

linux的博客 468

【设计模式】单例模式的8种实现方式

所谓类的单例设计模式,介绍采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。单例模式有八种方式1)饿汉式(静态常量)【可用】2)饿汉式(静态代码块)【可用】3)懒汉式(线程不安全)【不推荐】4)懒汉式(线程安全,同步方法)【不推荐】5)懒汉式(线程安全,同步代码块)【不推荐】6)双重检查【推荐】7)静态内部类【推荐】8)枚举【推荐】

oNew_Lifeo的博客 1460

前端实现微信扫一扫的思路

本篇文章的关键点就是讲解了我在实现处理多张二维码的场景时的思路,利用canvas遮挡识别过的二维码这个思路是pbk-bin大佬最先想到的,在实现这个需求以后还是很感叹这个思路的巧妙。👏pbk-bin🎁~如果文章对你有帮助,不妨赠人玫瑰,手有余香,预计将会在下篇更新较为完整的微信扫一扫界面和功能。

fang_my的博客 2488

单例模式的5种实现方式,最后一种最推荐

单例模式有多种实现方式,选择哪种方式取决于你的具体需求。如果你希望在程序启动时就创建实例,可以选择饿汉式;如果你希望在需要时才创建实例,可以选择懒汉式、静态内部类或枚举。在多线程环境下,需要注意线程安全问题。希望本文能帮助你更好地理解和使用单例模式。

QiuMing 4034

图神经网络实战——利用节点回归预测网络流量

在机器学习中,回归指的是对连续值的预测。通常与分类形成鲜明对比,分类的目标是找到正确的类别(即离散值,而非连续值)。在图数据中,分类和回归分别对应于节点分类和节点回归。在本节中,我们将尝试预测每个节点的连续值,而非分类变量。

盼小辉丶的博客 1万+

[QMT量化交易小白入门]-七十一、十年回测ETF动量策略,超额年化收益率为10.6%

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1850

Python中实现单例模式的几种常见方法

Python提供了多种实现单例模式的方法,包括使用模块、装饰器、重写__new__方法、使用元类以及线程安全机制等。每种方法都有其适用场景和优缺点,可以根据实际需求选择合适的方法。单例模式虽然有其优点,但也可能导致代码的耦合性增加,因此在设计时要权衡利弊。

md_1008的博客 464

完整复现YOLOv8:包括训练、测试、评估、预测阶段【本文源码已开源,地址在文章末尾】

(这里主要是在colab.research.google.com实现的,本地的配置也是类似的方法)YOLOv8是一种用于目标检测的深度学习算法。主要参考:https://github.com/ultralytics/ultralytics/blob/main/README.zh-CN.md。yolov8的权重:https://github.com/ultralytics/assets/releases。yolov8的文档:https://v8docs.ultralytics.com/

源代码杀手的博客 1万+

单例模式几种方法实现

单例模式 动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? public sealed class Singleton { private static Singleton _instance = null; private Singlet...

a2217018103的博客 318

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java 实现单例模式的几种方法

单例模式是一种常用的软件设计模式,其目的是确保一个类在任何情况下只有一个实例,并提供一个全局访问点供外部获取这个唯一的实例。这种模式特别适用于那些具有全局状态的场合,如配置管理器、线程池、缓存、对话管理等。

lt5227的博客 1393

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java实现单例模式的几种方法

设计模式之单例模式 Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供。” 饿汉式:类加载的时候就实例化,并且创建单例对象。 //饿汉式 :类加载的时候就实例化,并且创建单例对象。 public class Hungry { public Hungry() { System.out.println(Thread.currentThread().getName()+"ok"); } private static final Hungr

一不小心做了程序员的博客 411

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

单例模式的几种实现方法

1.单例模式定义 通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类在整个系统当中只有一个对象实例,即:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 2.单例模式结构图 3.单例模式的实现方法 1.饿汉式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){ } public stat

CancerCao 232

java单例模式几种实现方法

java单例模式中,留意几个关键点:构造方法私有化,单例对象变量需要static修饰,借助公有方法获取单例对象。另外也需要考虑线程是否安全,是否为延迟加载。 饿汉模式 public class Hungry{ private final static Hungry instance=new Hungry(); private Hungry(){} public ...

GD_Hacker的博客 308

C#实现单例模式的几种方法

介绍非线程安全的单例版本简单线程安全版本(通过lock实现)Double-checked locking不完全懒汉式,但不加锁的线程安全完全懒汉实例化使用.NET 4 Lazy<T&...

zls365365的博客 204

实现单例模式的几种方法

单例模式(singleton): 某些类在进程的运行过程,只需要一个对象,不允许创建多个对象出来 如何写单例模式: 1.饿汉模式——一开始就创建好对象 class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Sing...

qq_45605759的博客 284

单例模式的实现的几种方法

单例模式的实现的几种方法单例模式饿汉式懒汉式双重检测锁式静态内部类式枚举单例 单例模式 饿汉式 饿汉式的特点:线程安全,调用效率高,但是不能延迟加载 实现源码: public class damli { private static damli dl = new damli(); private damli(){}; public static damli getdl(){ retu...

qq_42924779的博客 295

python实现单例模式的几种方法实例详解

单例模式(Singleton Pattern): 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。 实现单例模式第一种方法: 1.实例化一个的对象,要用时直接import导如这个对象,而不是再实例化一个,这样就做到了单例模式了,每次都用的是同一个对象,此处就不举例了; 实现单例模式第二种方法: 2.我们知道,当我们实例化一个对象时,是先执行了类的__new__方法(我们没写时,默认调用object.new),实例

马儿不会飞 6966

java单例模式的几种常见实现方法

java单例模式的几种常见实现方法,饿汉模式、懒汉模式、内部类方式,什么样的实现方式是线程安全的,什么样不是线程安全的,什么较为推荐较为不推荐,在本文中阐释。

qq_38349413的博客 264

C#实现单例模式的几种方法总结

C#单例模式

BSX_null 1720

python中单例模式的几种实现方法

  在我理解单例模式:某个进程在生命周期内某类只存在一个实例对象。使用场景例如logger,配置模块,数据库连接池为了减少资源使用可以使用单例模式。...

eggnice的博客 1033

C++ 实现单例模式的几种方法

在开发中,有时候会需要一些类在项目的生命周期中只有一个实例。这样的设计被称作单例模式。本文用于记录项目开发过程中,设计日志管理器时用到的单例模式,以及开发过程中的一些学习和思考。

ahflex126r的博客 615
上一篇: java调用groovy类——修正版
下一篇: 新浪微博OAuth授权的Java实现
欧德曼
博客等级 码龄19年 63粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值