单例模式的几种实现方式

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

在Java中,实现单例模式主要有几种方式:懒汉式、饿汉式、双重检查锁定、静态内部类和枚举。每种方式都有其特点和适用场景。

1. 饿汉式(线程安全)

饿汉式是最简单的一种实现方式,通过静态初始化实例,保证了线程安全。但它不是懒加载模式,无法在实际使用时才创建实例。

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

2. 懒汉式(线程不安全)

懒汉式实现了懒加载,但在多线程情况下不能保证单例的唯一性。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

3. 懒汉式(线程安全)

通过同步方法保证线程安全,但每次访问时都需要同步,会影响性能。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

4. 双重检查锁定(DCL)

双重检查锁定既保证了线程安全,又避免了每次访问时的性能损失。

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

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

5. 静态内部类

使用静态内部类的方式实现懒加载,且由JVM保证线程安全。

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

    private Singleton() {}

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

6. 枚举

使用枚举的方式是实现单例的最佳方法,不仅能避免多线程同步问题,还能防止反序列化重新创建新的对象。文章来源地址https://www.toymoban.com/news/detail-828844.html

// 实现枚举单例
public enum Singleton {
    INSTANCE; // 唯一的枚举实例

    // 枚举类中可以包含成员变量、方法等
    private int value;

    // 可以定义自己需要的操作,如设置、获取枚举实例的状态等
    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    // 还可以定义其他方法
    public void show() {
        System.out.println("This is an enum singleton method.");
    }
}

// 使用枚举单例
public class TestSingleton {
    public static void main(String[] args) {
        Singleton singleton = Singleton.INSTANCE;

        singleton.setValue(1);
        System.out.println(singleton.getValue());

        singleton.show();
    }
}

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

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

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

相关文章

  • 设计模式:干掉if else的几种方法

    存在的问题: 如果业务逻辑过多 if else 可能要写多达几百行,这样代码可读性很差,不利于寻找bug和理解代码 如果if后面的判断逻辑过长,则代码可读性不强 如果将其写在一个核心代码里面,则新增功能时需要修改核心代码,要是不小心改到其他的代码就凉凉了 当业务逻辑

    2024年02月07日
    浏览(40)
  • 【Qt专栏】实现单例程序,禁止程序多开的几种方式

    目录 一,简要介绍 二,实现示例(Windows) 1.使用系统级别的互斥机制 2.通过共享内存(进程间通信-IPC) 3.使用命名互斥锁(不推荐) 4.使用文件锁 5.通过网络端口检测 前言 禁止程序多开,也称为“单实例应用程序”或“单例应用程序”,是指通过各种手段防止同一个应用

    2024年02月10日
    浏览(56)
  • 设计模式——单例模式8种实现

    1、了解概念: 单例模式是指采用一定的方法保证在整个软件系统种,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 个人理解:一个类只能实例化一个对象,其他的使用都是引用这个对象。 单例模式的八种实现方式 单例模式的

    2024年02月21日
    浏览(46)
  • 【开源与项目实战:开源实战】82 | 开源实战三(中):剖析Google Guava中用到的几种设计模式

    上一节课,我们通过 Google Guava 这样一个优秀的开源类库,讲解了如何在业务开发中,发现跟业务无关、可以复用的通用功能模块,并将它们从业务代码中抽离出来,设计开发成独立的类库、框架或功能组件。 今天,我们再来学习一下,Google Guava 中用到的几种经典设计模式:

    2024年02月11日
    浏览(69)
  • 设计模式:单例模式六种实现

    单例模式有多种实现方式,每种方式都有其设计思想、优缺点以及适用的使用场景。以下是一些常见的单例实现方式: 1. 懒汉式(线程不安全) 设计思想 这种实现方式采用了类加载的懒加载机制来保证单例只在第一次使用时被创建。 实现代码 优缺点 优点:延迟加载,只在

    2024年04月12日
    浏览(41)
  • Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月14日
    浏览(44)
  • 【设计模式】单例模式、“多例模式”的实现以及对单例的一些思考

    单例模式是设计模式中最简单的一种,对于很多人来说,单例模式也是其接触的第一种设计模式,当然,我也不例外。这种设计模式在学习、面试、工作的过程中广泛传播,相信不少人在面试时遇到过这样的问题:“说说你最熟悉的集中设计模式”,第一个脱口而出的就是单

    2024年02月07日
    浏览(49)
  • 设计模式——C++11实现单例模式(饿汉模式、懒汉模式),与单例的进程

    本文将介绍单例模式,使用C++11实现多个版本的单例模式,分析各自的优缺点。最后提及如何实现一个单例的进程。 单例模式属于创建型模式,提供了一种创建对象的方式。 单例模式确保一个类只有一个实例。通过一个类统一地访问这个实例。 思想:将构造函数设置为私有

    2024年02月09日
    浏览(49)
  • 【设计模式】23种设计模式——单例模式(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    介绍 所谓类的单例设计模式,就是采取一定的方法, 保证在整个的软件系统中,对某个类只能存在一个对象实例 ,并且该类只提供一个取得其对象实例的方法(静态方法)。 比如Hibernate的SessionFactory,它充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量

    2024年02月13日
    浏览(45)
  • 用Rust实现23种设计模式之单例

    话不多说,上代码! 在这个例子中,我们使用了 Arc (原子引用计数)和 Mutex (互斥锁)来实现线程安全的单例。通过 get_instance 方法,我们可以获取到单例实例,并对实例进行操作。 使用 lazy_static crate: lazy_static crate 是一个常用的 Rust crate,可以实现懒加载的全局静态变量

    2024年02月14日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包