1.单例(Singleton)模式定义

  • 指一个类只有一个实例,且该类能自行创建这个实例的一种模式。

2.单例模式特点

  • 单例类只有一个实例对象;
  • 该单例对象必须由单例类自行创建;
  • 单例类对外提供一个访问该单例的全局访问点;

3.单例模式结构图

4.单例模式实现

  • 第一种:懒汉式单例

类加载时没有生成单例,只有当第一次调用 getlnstance 方法时才去创建这个单例。

package 

注意:

  1.如果编写的是多线程程序,则不要删除上例代码中的关键字 volatile 和 synchronized,否则将存在线程非安全的问题。

  2.如果不删除这两个关键字就能保证线程安全,但是每次访问时都要同步,会影响性能,且消耗更多的资源,这是懒汉式单例的缺点。

  • 第二种:饿汉式单例

类一旦加载就创建一个单例,保证在调用 getInstance 方法之前单例已经存在了。

package 

饿汉式单例在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全的。

5.单例模式的应用场景

  • 在应用场景中,某类只要求生成一个对象。
  • 当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如数据库的连接池。
  • 当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池。

java单例模式_java设计模式-单例模式相关推荐

  1. java单例模式_Java 实现单例模式的 9 种方法

    Linux编程点击右侧关注,免费入门到精通! 作者丨java团长 一. 什么是单例模式 因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单 ...

  2. java懒加载设计模式_java设计模式——单例模式

    整理一下设计模式的个人理解. 描述 单例模式是java中比较常见的一种设计模式,顾名思义为一个类只能创建一个实例,多用于全局对象,如:配置的加载,spring bean加载各种配置(spring容器所 ...

  3. java设计模式 单例_java设计模式--单例模式

    单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例 ...

  4. java单例设计模式双重_Java 设计模式 ——单例模式(饿汉,懒汉,双重锁,静态内部类)...

    设计模式: 是在大量的实践中总结和理论化之后优选的代码结构,编程风格,以及解决问题的思考方式.设计模式免去我们自己再思考和摸索.就像是经典的棋谱,不同的棋局,我们用不同的棋谱 俗称"套路&q ...

  5. java圣经_Java设计模式圣经连载(01)-简单工厂模式[转载]

    简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式.简单工厂模式是由一个工厂对象决定创造哪一种产品类的实例. 1.1.1 工厂模式的几种形态 工厂模式专门负责 ...

  6. 访问者模式的java语言_Java 设计模式系列(二三)访问者模式(Vistor)

    Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...

  7. 装饰模式java咖啡_Java设计模式——装饰者模式

    概述: 本章可以称为"给爱用继承的人一个全新的设计眼界".我们即将再度探讨典型滥用问题.你将在本章学到如何使用对象组合的方式,做到在运行时装饰类.为什么呢?一旦你熟悉了装饰者的技巧 ...

  8. 访问者模式的java语言_Java 设计模式 之 访问者模式

    package com.visit.theory; import java.util.ArrayList; public class Test { public static void main(St ...

  9. 原型模式 java 深浅_JAVA设计模式---原型模式--浅客隆和深克隆

    JAVA浅克隆和深克隆 浅克隆:被复制对象的所有变量和原来相同,而所有的对其他对象的引用仍指向原对象.即如果复制的对象修改复制对象的变量,原对象不会改变.而修改引用的对象,二者均会发生改变. 深复制( ...

最新文章

  1. JAVA的知识点4——字符型变量/常量 boolean类型变量/常量
  2. linux基础面试题(46个汇总)
  3. 汇编.s文件包含头文件处理
  4. Angular网络请求的封装
  5. 【OpenCV 例程200篇】48. 图像增强—彩色直方图匹配
  6. Oracel 连接远端服务器
  7. 成功的MES项目,前期都做了些什么?
  8. hmcl启动器java下载_hmcl启动器下载
  9. ASCII码与16进制转换表
  10. Deecamp冬令营小记
  11. matlab解方java_Java:调用window的matlab遇到的问题和解决方案
  12. 2011浙江省公务员考试申论大作文的写作
  13. PS笔刷:73款动漫风格的云朵小草花朵
  14. Azuki:缔造NFT元宇宙品牌
  15. uboot启动时flash擦除大小问题
  16. Mysql 5.5.8 安装手册
  17. Java修改JTable单元格背景色
  18. dz打不开plugin. php,Discuz!应用中心打不开空白的解决方法
  19. 用matlab实现运筹学最短路问题,运筹学最短路问题实验报告
  20. spring boot工作计划管理软件 毕业设计-附源码181638

热门文章

  1. 微信公众号Web页面CSS文件里面的样式不加载
  2. ssm上传文件获取路径_ssm框架实现图片上传显示并保存地址到数据库(示例代码)...
  3. python爬取cctalk视频_新媒体编辑怎么批量爬取数据
  4. vue import request from ‘@/xxx/xxx‘,@是什么意思怎样配置
  5. Java队列Queue的使用
  6. LinkedHashMap转对象
  7. Redis持久化与过期机制
  8. win10无法成功完成操作,文件包含病毒怎么办
  9. easyui181版本使用记录
  10. python之循环(增删)内使用list.remove()