Java设计模式之单例模式

单例模式(Singleton Pattern)

1. 概述

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要确保全局只有一个实例的场景,比如配置管理器、日志记录器等。

2. 适用场景
  • 系统中只需要一个实例来提供某项服务,如配置管理、日志记录、数据库连接池等。
  • 需要控制实例的创建过程,防止多个实例带来的资源浪费或冲突。
3. 实现方式

单例模式的实现方式主要有以下几种:

  • 懒汉式(Lazy Initialization):实例在第一次使用时创建。
  • 饿汉式(Eager Initialization):类加载时就创建实例,线程安全。
  • 双重检查锁(Double-Check Locking):懒汉式的线程安全实现,减少同步开销。
  • 静态内部类(Bill Pugh Singleton Design):使用静态内部类来实现线程安全的单例模式。
  • 枚举方式:使用枚举来实现单例,保证唯一性和线程安全。
4. 示例代码
1. 懒汉式(线程不安全)
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
2. 懒汉式(线程安全)
public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public synchronized static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
3. 双重检查锁
public class Singleton {
    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;
    }
}
4. 静态内部类(推荐)
public class Singleton {
    private Singleton() {}

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

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
5. 枚举方式(推荐)
public enum Singleton {
    INSTANCE;

    // 可以定义其他方法
    public void doSomething() {
        System.out.println("Singleton instance method");
    }
}
5. 分析
  • 懒汉式(线程不安全):简单实现,但在多线程环境下可能会出现问题。
  • 懒汉式(线程安全):使用 synchronized 关键字来确保线程安全,但可能会影响性能。
  • 双重检查锁:在保证线程安全的同时,减少了同步开销,性能较好。
  • 静态内部类:利用类加载机制实现延迟初始化,并且线程安全,推荐使用。
  • 枚举方式:实现最简单,线程安全,避免了序列化带来的问题,推荐使用。
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿时光不负.

爱意随风起,风止意难平。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值