java单例模式_Java描述设计模式(01):单例模式
![](/assets/blank.gif)
本文源码: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
![](/assets/blank.gif)
java单例模式_Java描述设计模式(01):单例模式相关推荐
- Java面试23种设计模式之单例模式的8种实现方式
单例模式8中实现方式 1.单例模式介绍 2.单例模式的八种方式 3.饿汉式(静态常量),这种单例模式可用,可能造成内存浪费. 4.饿汉式(静态代码块),这种单例模式可用,可能造成内存浪费. 5.懒汉式 ...
- java enum 单例模式_Java最给力的单例模式
一.定义 通俗的解释:独一无二的对象,(只有一个实例,而且只能有一个实例存在) 二.要素 1.某个类只能有一个实例(只能被new一次). 2.他必须自行创建这个实例(自己创建). 3.他必须自行向整个 ...
- Java啤酒生产系统描述_Java描述设计模式(03):工厂方法模式
一.工厂方法模式 1.生活场景 系统常见的数据导出功能:数据导出PDF.WORD等常见格式. 2.工厂方法模式 是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性 ...
- java备忘录模式应用场景_Java描述设计模式(24):备忘录模式
一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时,视频会从上次切走的时间点继续播放.下面基于备忘录设计模式来 ...
- Java啤酒生产系统描述_Java描述设计模式(02):简单工厂模式
一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根据食品名称,加工指定类型食品 4).模拟客户端预定操作 2 ...
- java备忘录代码和解释_Java描述设计模式(24):备忘录模式
一.生活场景 1.场景描述 常见的视频播放软件都具备这样一个功能:假设在播放视频西游记,如果这时候切换播放视频红楼梦,当再次切回播放西游记时,视频会从上次切走的时间点继续播放.下面基于备忘录设计模式来 ...
- Java啤酒生产系统描述_Java描述设计模式(04):抽象工厂模式
一.抽象工厂模式 1.生活场景 汽车生产根据用户选择的汽车类型,指定不同的工厂进行生产,选择红旗轿车,就要使用中国工厂,选择奥迪轿车,就要使用德国工厂. 2.抽象工厂模式 1) 抽象工厂模式:定义了一 ...
- php单例模式代码,php设计模式之单例模式代码
/** * php设计模式 单例模式 */ class Fruit{ private static $instanceMap = array(); //protected getter for sin ...
- php 单例模式 序列化,php设计模式(二)单例模式
应用场景: 数据库连接这种比较耗费资源的操作: 我们希望整个应用只实例化一个: 结构: 4私1公: 私有化构造方法: 防止使用 new 创建多个实例: 私有化克隆方法: 防止 clone 多个实例: ...
最新文章
- python3.8安装pip-CentOS7.2安装python3.8与pip
- How to write an operating system
- alpine linux 源码安装,关于docker:如何安装Go in alpine linux
- linux系统的安装程序,Linux系统安装
- 前端学习(2779):项目功能介绍
- vscode设置python多进程调试_python之vscode配置开发调试环境
- oracle 某一字段取反
- html+css基础-1-屏幕居中、双飞翼布局、清除浮动
- python预定义_[Python] Pycharm 预定义 coding 模板
- P2P风控措施和风控流程
- python函数库 阶跃 信号函数 调用_使用numpy增加阶跃函数中的分辨率
- 声临其境,轻松几步教你把音频变成3D环绕音
- 物联网卡零售应用的真实案例
- 数字水印技术研究综述
- php控制器面向对象编程,PHP 面向对象编程(2)
- 探访广州黑人区,我好像来到非洲
- 杭电2026——首字母变大写
- 【评弹】夺印-夜访 歌词 盛小云
- 传感器模拟器——python
- Highlighting System V4.0(用于模型外发光)