Java设计模式-单例模式

单例模式

1.单例模式含义

单例模式就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。

其实单例模式很好理解,当我们new一个对象实例的时候,这个对象会被放到一个内存中,当我们再次new同一个对象的实例的时候,此时系统就又会为我们新创建的这个对象分配一个新的内存。这就是普通的对象创建方式,单例模式呢就是,无论我们创建多少次对象,所有的创建出来的对象,都指向同一个内存,都是同一个对象。

2.代码示例

2.1Singleton类

Singleton类是目标类,就是我们要new的对象

java 复制代码
public class Singleton {
    private static Singleton instance;

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

2.2测试类

java 复制代码
public class MainApp {
    public static void main(String[] args) {
        Singleton instance1 = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println("instance1的内存地址:" + instance1);
        System.out.println("instance2的内存地址:" + instance2);
    }
}

运行结果

instance1的内存地址:com.dalei.singleton.Singleton@1b6d3586

instance2的内存地址:com.dalei.singleton.Singleton@1b6d3586

从运行结果可以看到,虽然我们创建了两个Singleton对象的实例,但是这两个实例所指向的内存地址是一模一样的,也就是说这两个实例是相等的,是同一个。

3.总结

单例模式的目的就是为了让一个类自始至终都仅保持唯一的一个实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。

单例模式有两种初始化方式,一种饿汉式,一种懒汉式

  • 饿汉式:就是在类被加载的时候就将自己实例化出来

    饿汉式使用,会提前占用系统资源,但是不会出现多线程问题,因为线程工作前,这个单例对象已经被创建好了。

  • 懒汉式:就是在第一次引用这个类的时候,才将自己实例化

    懒汉式使用,不会提前占用系统资源,但是会出现多线程问题,要做好线程并发控制,否则对象就会创建多个出来。

这两种实例化的方式,区别就是加载时机不同。

综上,单例模式是为了让我们在任何时候任何地方引用到的都是同一个对象,如果想要实现这个效果,那单例模式就是很好的解决方法。不过使用单例模式的时候要注意避免多线程并发问题,解决多线程并发的方法很多种,加锁,使用枚举等等,此处不做深入讨论。

相关推荐
卓码软件测评2 小时前
第三方软件测试机构【性能测试工具用LoadRunner还是JMeter?】
java·功能测试·测试工具·jmeter·性能优化
念何架构之路5 小时前
Go语言设计模式(七)组合模式
设计模式·组合模式
Lionel_SSL5 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
记得开心一点嘛5 小时前
手搓Springboot
java·spring boot·spring
老华带你飞6 小时前
租房平台|租房管理平台小程序系统|基于java的租房系统 设计与实现(源码+数据库+文档)
java·数据库·小程序·vue·论文·毕设·租房系统管理平台
独行soc6 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
脑子慢且灵6 小时前
[JavaWeb]模拟一个简易的Tomcat服务(Servlet注解)
java·后端·servlet·tomcat·intellij-idea·web
华仔啊7 小时前
SpringBoot 中 6 种数据脱敏方案,第 5 种太强了,支持深度递归!
java·后端
异常驯兽师8 小时前
Spring 中处理 HTTP 请求参数注解全解析
java·spring·http
连合机器人9 小时前
晨曦中的守望者:当科技为景区赋予温度
java·前端·科技