当前位置: 首页 > news >正文

Java设计模式-单例模式

单例模式

1.单例模式含义

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

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

2.代码示例

2.1Singleton类

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

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

2.2测试类

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.总结

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

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

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

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

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

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

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

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

http://www.lryc.cn/news/95884.html

相关文章:

  • 小程序----配置原生内置编译插件支持sass
  • GitLab 删除项目
  • Mac m1 下eclipse下载及jdk环境变量配置
  • Java中List与数组之间的相互转换
  • 嵌入式_GD32看门狗配置
  • Python 中的 JSON 操作:简单、高效的数据交换格式
  • IT行业面试攻略:技巧与心态的平衡
  • 【玩转Linux】标准io缓冲区的操作
  • 28.JavaWeb-Elasticsearch
  • Python Flask构建微信小程序订餐系统 (十)
  • j2ee相关知识点
  • Shell脚本学习-eval内置命令
  • word中将合并后的多行拆分为原先的行数
  • 网络知识点之-BGP协议
  • 【mac系统】mac系统调整妙控鼠标速度
  • AI > 语音识别开源项目列举
  • golang单元测试及mock总结
  • mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver
  • 驱动day4work
  • [SQL挖掘机] - 字符串函数 - length
  • 「深度学习之优化算法」(十七)灰狼算法
  • mysql主从复制(主-从-从)
  • 如何制定数据采集解决方案?
  • RabbitMQ消息可靠性问题及解决
  • 2023河南萌新联赛第(三)场:郑州大学(两个题目)
  • 学生管理系统-07打包与上线
  • day31贪心算法 用最少数量的箭引爆气球 和无重叠区间
  • AMEYA360报道:手机直连卫星通信发展的三个阶段
  • redis中缓存雪崩,缓存穿透,缓存击穿的原因以及解决方案
  • ChatGPT火热之下的冷思考