设计模式之单例模式

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;
        }
    
    }
相关推荐
海特伟业15 小时前
隧道调频广播覆盖-隧道调频广播无线覆盖系统建设要点、难点分析与解决应对
运维·设计模式
sg_knight15 小时前
设计模式实战:享元模式(Flyweight)
python·设计模式·享元模式·flyweight
Swift社区18 小时前
AI 时代,ArkUI 的设计模式会改变吗?
人工智能·设计模式
数据中穿行18 小时前
访问者设计模式全方位深度解析
设计模式
宁雨桥18 小时前
前端设计模式面试题大全
前端·设计模式
数据中穿行19 小时前
迭代器设计模式全方位深度解析
设计模式
数据中穿行19 小时前
观察者设计模式全方位深度解析
设计模式
程序员Terry20 小时前
别老写重复代码了!模版方法模式一次讲透
java·设计模式
数据中穿行20 小时前
建造者模式全方位深度解析
设计模式