GoF23--单例模式的三种常见写法

博客介绍了单例模式,即保证一个类只有一个实例并提供全局访问点,可减少系统性能开销、提高效率。阐述了三种常见写法:饿汉式、懒汉式和静态内部类式,还比较了它们的特点,并给出不同场景下的使用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

保证一个类只有一个实例(构造器私有化),并且提供一个访问该实例的全局访问点(静态公有方法返回实例对象)。
单例模式只生成一个实例,减少了系统的性能开销,提高效率。

三种常见写法

饿汉式

在类加载的时候,就完成初始化,线程安全,不具备延迟加载特性。

public class SingletonHungry {
    //类加载时就已经初始化,虚拟机只装载一次此对象
    private static SingletonHungry instance = new SingletonHungry();
    //私有化构造器
    private SingletonHungry(){}
    public static SingletonHungry getInstance(){
        return instance;
    }
}

懒汉式

在类加载时不创建实例,采用延迟加载的方式,在运行调用时创建实例,线程不安全,调用效率低。

public class SingletonLazy {
    private static SingletonLazy instance = null;
    //私有构造器
    private SingletonLazy(){}
    //加同步块synchronized,提高线程安全性
    public static synchronized SingletonLazy getInstance(){
        if(null == instance){
            instance = new SingletonLazy();
        }
        return instance;
    }
}

静态内部类式

实现了懒加载,保证了线程安全;兼备了并发高效调用和延迟加载的优势。

public class SingletonClass {
    //静态内部类
    private static class SingletonStatic{
        private static final SingletonClass instance = new SingletonClass();
    }
    //私有构造器
    private SingletonClass(){}
    public static SingletonClass getInstance(){
        return SingletonStatic.instance;
    }
}

三种写法特点比较

单例模式懒汉模式饿汉模式静态内部类式
延迟加载具备不具备具备
线程安全线程不安全线程安全线程安全

如果单例类耗费系统资源较多,建议使用懒汉式和静态内部类式;如果对线程安全性要求高,建议使用饿汉式和静态内部类式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值