如何自定义一个单例类?

这篇具有很好参考价值的文章主要介绍了如何自定义一个单例类?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

要自定义编写一个单例类,有两种方法如下:

一、饿汉式单例:

饿汉式单例指的是在类加载时就创建并初始化单例对象。下面是一个简单的饿汉式单例Bean的示例:

java
public class MySingleton {
    private static final MySingleton instance = new MySingleton(); // 饿汉式单例对象

    private MySingleton() {
        // 私有化构造方法
    }

    public static MySingleton getInstance() {
        return instance; // 直接返回单例对象的引用

二、懒汉式单例:

1、将类的构造方法私有化,以防止其他代码通过new关键字创建对象。

2、在类内部创建一个私有静态成员变量,用于保存单例对象的引用。

3、提供一个公共的静态方法,用于获取单例对象的引用。

4、在该公共静态方法中判断单例对象是否已经被创建

5、如果单例对象为空,则创建一个新的对象并赋值给单例对象。

6、如果单例对象已经存在,则直接返回该对象的引用。

可选:对于多线程环境下的单例类,需要考虑线程安全性,可以采用双重检查锁定或者静态内部类等方式来实现线程安全的单例。

下面是一个简单的单例类示例,基于懒汉式的实现方式:

public class MySingleton {
    private static MySingleton instance; // 私有静态成员变量,保存单例对象的引用

    private MySingleton() {
        // 私有化构造方法
    }

    public static MySingleton getInstance() {
        if (instance == null) { // 判断单例对象是否为空
            synchronized (MySingleton.class) { // 使用双重检查锁定保证线程安全
                if (instance == null) {
                    instance = new MySingleton(); // 创建单例对象
                }
            }
        }
        return instance; // 返回单例对象的引用
    }
}

三、总结:

饿汉式和懒汉式是两种常见的单例设计模式,它们有不同的实现方式和适用场景,下面是对它们的总结以及应用场景区别的说明

  1. 饿汉式单例:

    • 类加载时就创建并初始化单例对象。
    • 优点:简单直观,线程安全,不需要考虑多线程同步问题。
    • 缺点:无论是否使用单例对象,都会在类加载时创建对象,可能占用一定的资源
    • 适用场景:适用于单线程环境或确保一定会使用到单例对象的场景,对性能要求较高
  2. 懒汉式单例:

    • 第一次调用获取单例对象的方法时才创建并初始化单例对象。
    • 优点:延迟加载,节省资源,在不使用单例对象时不会创建。
    • 缺点:需要考虑多线程环境下的线程安全问题,需要进行同步处理。
    • 适用场景:适用于多线程环境或希望在需要时才创建对象的场景,对性能要求相对较低

区别:文章来源地址https://www.toymoban.com/news/detail-540640.html

  • 初始化时间:饿汉式在类加载时就初始化单例对象,而懒汉式在第一次调用时才初始化。
  • 线程安全性:饿汉式天生线程安全,懒汉式需要考虑多线程环境下的线程安全性问题。
  • 资源占用:饿汉式无论是否使用单例对象,都会在类加载时创建对象,可能占用相应的资源;懒汉式在不使用单例对象时不会创建,延迟资源占用

到了这里,关于如何自定义一个单例类?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解单例模式:如何确保一个类只有一个实例?

    欢迎来到英杰社区 https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区 https://bbs.csdn.net/topics/617897397 单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供全局访问点。虽然在表面上看起来很简单,但深入理解单例模式可以帮助我们更好地应用它

    2024年01月17日
    浏览(41)
  • Java 设计模式 - 单例模式 - 保证类只有一个实例

    单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在某些情况下,我们需要确保一个类的实例在整个应用程序中是唯一的,这时候单例模式就非常有用。在本篇博客中,我们将详细探讨单例模式的概念、实现方式以及如何在

    2024年02月15日
    浏览(33)
  • 什么是单例模式,如何在Java中实现单例?

    单例模式是一种创建对象的设计模式,它确保只有一个实例,并提供对该实例的全局访问点。在Java中实现单例有懒汉式和饿汉式两种方式。 懒汉式单例模式: 在懒汉式单例模式中,对象创建在第一次使用时才会被创建。例如,当某个类第一次被实例化时,JVM会在堆内存中分

    2024年02月15日
    浏览(43)
  • Android 安卓开发语言kotlin与Java该如何选择

            如今在Android开发中,应用层开发语言主要是Java和Kotlin,Kotlin是后来加入的,主导的语言还是Java。kotlin的加入仿佛让会kotlin语言的开发者更屌一些,其实不然。         有人说kotlin的引入是解决开发者复杂的逻辑,并且对空指针控制的比较友好,但是我们在开

    2024年02月11日
    浏览(33)
  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现

    单例模式(Singleton Pattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。 当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式

    2023年04月27日
    浏览(71)
  • 如何自定义一个协议

    先有一个需求,有个场景,打开外卖软件,会显示商家列表,列表中有很多项,每一项都包含了一些信息,商家的名称,图片,好评率,距离你的位置,评分 这些信息都是通过网络,从服务器获取的, 客户端,需要给服务器发送一个请求,服务器收到请求之后,就给客户端返回一个响应,这里的请

    2024年02月22日
    浏览(26)
  • python如何定义一个简单的队列

    哈哈,其实根本不需要用 类 (class)去定义一个 队列 (queue),因为我没有想到 list 结构竟然这么万能,它本身就是一个活生生的 队列 。 1.定义一个队列,其实就是一个列表哈哈,说明一下,队头在前面,队尾在后面。 即,这个队列a对应如下图示: 2.入队 insert tail ,这个大家

    2023年04月08日
    浏览(35)
  • angular中如何定义一个全局组件?

    需求,我们需要新建一个navBreadcrumb的全局组件。这是一个面包屑导航,在不同的页面引入时传入一个路由数组即可。 第一步:我们新建这个组件: 这里有几个要注意的点: 1 ---nav-breadcrumb.module----------这个文件时一定要的。angular和vue/react不同,modulecomponent,对于任何页面而

    2024年02月12日
    浏览(28)
  • 如何正确实现一个自定义 Exception

    最近在公司的项目中,编写了几个自定义的 Exception 类。提交 PR 的时候,sonarqube 提示这几个自定义异常不符合 ISerializable patten. 花了点时间稍微研究了一下,把这个问题解了。今天在此记录一下,可能大家都会帮助到大家。 编写一个自定义的异常,继承自 Exception,其中定义

    2024年02月10日
    浏览(26)
  • idea插件开发-自定义语言00-开发导航

     源码 Initial Setup(初始化设置) ​​Registering a File Type​​​ :注册文件类型要实现一个自定义的语言必须要实现的,​​示例代码​​ ​​Implementing Lexer实现​​ :实现编程语言的语法分析器,​​示例代码​​ ​​Implementing Parser and PSI​​​:实现一个词法分析器

    2024年02月12日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包