本文源码:GitHub·点这里 || GitEE·点这里

一、单例模式

1、概念图解

单例设计模式定义:确保这个类只有一个实例,并且自动的实例化向系统提供这个对象。

2、样例代码

package 

Singleton称为单例类,构造函数使用private修饰,确保系统中只能产生一个实例,并且自动生成的。上面代码也就是所谓的懒汉式加载:只有到使用该对象的时候才来创建,意思饿了才来做饭吃。

二、线程安全问题

在上面的代码中存在一个很明显的线程安全问题,当有多条线程来请求对象实例的时候,因为对象的创建是需要时间的,假设A线程进来判断singleton == null,就会进入对象的创建过程,这时如果同时在过来几条线程,那么他们都会得到一个对象实例,这个就是所谓的线程安全问题。

1、同步控制方式

package 

这样操作会影响系统性能

2、饿汉式加载

public 

这里先把对象创建出来,有需要直接使用;

3、双重检查

public 

4、枚举方式

package 

三、延迟类初始化

1、基础概念

1)、类级内部类

简单点说,类级内部类指的是,有static修饰的成员式内部类。如果没有static修饰的成员式内部类被称为对象级内部类。
类级内部类相当于其外部类的static成分,它的对象与外部类对象间不存在依赖关系,因此可直接创建。而对象级内部类的实例,是绑定在外部对象实例中的。
类级内部类中,可以定义静态的方法。在静态方法中只能够引用外部类中的静态成员方法或者成员变量。
类级内部类相当于其外部类的成员,只有在第一次被使用的时候才被会装载。

2)、多线程缺省同步锁

在多线程开发中,为了解决并发问题,主要是通过使用synchronized来加互斥锁进行同步控制。但是在某些情况中,JVM已经隐含地执行了同步,这些情况下就不用自己再来进行同步控制了。这些情况包括:

1.由静态初始化器(在静态字段上或static{}块中的初始化器)初始化数据时
2.访问final字段时
3.在创建线程之前创建对象时
4.线程可以看见它将要处理的对象时

2、实现方式

要想很简单地实现线程安全,可以采用静态初始化器的方式,它可以由JVM来保证线程的安全性。比如前面的饿汉式实现方式,在类装载的时候就初始化对象,不管是否需要,存在一定的空间浪费。
一种可行的方式就是采用类级内部类,在这个类级内部类里面去创建对象实例。这样一来,只要不使用到这个类级内部类,那就不会创建对象实例,从而同时实现延迟加载和线程安全。

public 

四、JDK源码单例模式

Runtime单例实现源码。

1、案例演示

/**

2、源代码分析

public 

基于饿汉模式实现的单例模式。

五、Spring框架中应用

1、创建测试类

public 

2、Spring配置文件

<!-- 单例Bean -->

3、测试读取Bean对象

package 

结论

Spring单例模式与纯粹的单例设计模式的主要区别

尽管使用相同的类加载器来加载两个应用程序上下文,但是UserBean的实例是不一样的。也就是Spring框架中的单例对象是基于应用程序中。

六、单例模式总结

1、注意事项

单例模式注意事项和细节说明

1) 单例模式保证了 系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。
2) 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new Object() 的方式。
3) 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象。

2、优缺点

优点:
1、单例模式只会创建一个对象实例,减少内存消耗
2、设置全局访问点,优化共享资源的访问
缺点:
1、没有接口,很难扩展
2、不利于测试
3、与单一职责原则冲突

七、源代码地址

GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent

java单例模式_Java描述设计模式(01):单例模式相关推荐

  1. Java面试23种设计模式之单例模式的8种实现方式

    单例模式8中实现方式 1.单例模式介绍 2.单例模式的八种方式 3.饿汉式(静态常量),这种单例模式可用,可能造成内存浪费. 4.饿汉式(静态代码块),这种单例模式可用,可能造成内存浪费. 5.懒汉式 ...

  2. java enum 单例模式_Java最给力的单例模式

    一.定义 通俗的解释:独一无二的对象,(只有一个实例,而且只能有一个实例存在) 二.要素 1.某个类只能有一个实例(只能被new一次). 2.他必须自行创建这个实例(自己创建). 3.他必须自行向整个 ...

  3. Java啤酒生产系统描述_Java描述设计模式(03):工厂方法模式

    一.工厂方法模式 1.生活场景 系统常见的数据导出功能:数据导出PDF.WORD等常见格式. 2.工厂方法模式 是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性 ...

  4. java备忘录模式应用场景_Java描述设计模式(24):备忘录模式

    一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时,视频会从上次切走的时间点继续播放.下面基于备忘录设计模式来 ...

  5. Java啤酒生产系统描述_Java描述设计模式(02):简单工厂模式

    一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根据食品名称,加工指定类型食品 4).模拟客户端预定操作 2 ...

  6. java备忘录代码和解释_Java描述设计模式(24):备忘录模式

    一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时,视频会从上次切走的时间点继续播放.下面基于备忘录设计模式来 ...

  7. Java啤酒生产系统描述_Java描述设计模式(04):抽象工厂模式

    一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...

  8. php单例模式代码,php设计模式之单例模式代码

    /** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for sin ...

  9. php 单例模式 序列化,php设计模式(二)单例模式

    应用场景: 数据库连接这种比较耗费资源的操作: 我们希望整个应用只实例化一个: 结构: 4私1公: 私有化构造方法: 防止使用 new 创建多个实例: 私有化克隆方法: 防止 clone 多个实例: ...

最新文章

  1. python3.8安装pip-CentOS7.2安装python3.8与pip
  2. How to write an operating system
  3. alpine linux 源码安装,关于docker:如何安装Go in alpine linux
  4. linux系统的安装程序,Linux系统安装
  5. 前端学习(2779):项目功能介绍
  6. vscode设置python多进程调试_python之vscode配置开发调试环境
  7. oracle 某一字段取反
  8. html+css基础-1-屏幕居中、双飞翼布局、清除浮动
  9. python预定义_[Python] Pycharm 预定义 coding 模板
  10. P2P风控措施和风控流程
  11. python函数库 阶跃 信号函数 调用_使用numpy增加阶跃函数中的分辨率
  12. 声临其境,轻松几步教你把音频变成3D环绕音
  13. 物联网卡零售应用的真实案例
  14. 数字水印技术研究综述
  15. php控制器面向对象编程,PHP 面向对象编程(2)
  16. 探访广州黑人区,我好像来到非洲
  17. 杭电2026——首字母变大写
  18. 【评弹】夺印-夜访 歌词 盛小云
  19. 传感器模拟器——python
  20. Highlighting System V4.0(用于模型外发光)

热门文章

  1. RESTful API版本控制策略
  2. Nginx的页面中文乱码解决方法
  3. vc6.0连接mysql数据库
  4. Struts ActionForm简单理解
  5. 从几个sample来学习Java堆,方法区,Java栈和本地方法栈
  6. WideCharToMultiByte和MultiByteToWideChar函数的用法(转)
  7. 【Python】二维数组,使用 * 号来进行重复,导致结果不符合预期
  8. 【干货】分库分表最佳实践
  9. linux fedora35 zsh oh-my-zsh 的配置与使用
  10. 【收藏】vue3+vite+ts 封装axios踩坑记录