设计模式之单例模式

1.单例模式简介

  • 概念
    • 单例意思是只包含一个对象被称为单例的特殊类
    • 通过单例模式可以保证系统中,应用该模式的类只有一个对象实例
  • 使用场景
    • 业务系统全局只需要一个对象实例,比如发号器、redis连接对象等
    • Spring IOC容器中的bean默认就是单例
    • springboot中的controller、service、dao层中通过@Autowired的依赖注入对象默认都是单例的
  • 分类
    • 懒汉:就是所谓的懒加载,延迟创建对象
    • 饿汉:与懒汉相反,容器启动创建对象
  • 实现步骤
    • 私有化构造函数
    • 提供获取单例的静态方法

2.懒汉式单例模式代码

java 复制代码
public class Singleton {

    private static volatile Singleton singleton;

    private Singleton() {
    }

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

3.饿汉式单例模式

  • 饿汉方式:提前创建好对象

  • 优点:实现简单,没有多线程同步问题

  • 缺点:不管是否使用,instance对象一直占用内存

  • 如何选择

    • 如果对象不大,且创建不复杂,直接使用饿汉方式即可
    • 其它情况则采用懒汉实现方式
  • 代码实现

    java 复制代码
    public class Singleton {
    
        private static Singleton singleton = new Singleton();
    
        private Singleton() {
        }
    
        public static Singleton getSingleton() {
            return singleton;
        }
    
    }
相关推荐
剧中有戏1 小时前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式
breeze jiang4 小时前
JavaScript 单例模式:用静态属性保证 Popup 只创建一次
开发语言·javascript·单例模式
MC皮蛋侠客5 小时前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
meilindehuzi_a6 小时前
WebGPU DeepSeek项目实战(二):用单例模式加载Tokenizer并转发下载进度
单例模式·typescript·react
莫得感情 o7 小时前
设计模式 18 · 状态模式
设计模式·状态模式
莫得感情 o7 小时前
设计模式 17 · 责任链模式
设计模式·责任链模式
用户9385156350716 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
AI人工智能+电脑小能手21 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
今天的砖头有点烫手啊1 天前
AI Agent 开发实战(十):Agent 设计模式(ReAct / Plan-Execute / Reflection)
人工智能·react.js·设计模式
董员外1 天前
RAG 系统进化论(十):可运营 RAG,从原型到长期运行的知识系统
人工智能·后端·设计模式