单例模式

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。

如果我们要让类在一个虚拟机中只能产生一个对象:

  1. 将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。

  2. 提供一个public方法作为该类的访问点,用于创建该对象,必须是static修饰的,因为在类的外部开始还无法得到类的对象,只能通过类调用该方法。

  3. 缓存已创建的对象,否则该类无法知道是否已经创建了对象。静态方法只能访问类中的静态成员变量,所以该类对象的变量也必须定义成静态的。

单例设计模式一般有两种方式:饿汉式和懒汉式。

饿汉式:

// 饿汉式
class Book{//1.私有构造器private Book(){}//2. 在类内部创建对象private static Book instance = new Book();//3. 提供外部访问点public static Book getInstance (){return instance;}
}

懒汉式:

//懒汉式
class Bank{private Bank(){}private static Bank instance=null;public static Bank getInstance(){if (instance==null){instance = new Bank();}return instance;}}

饿汉式和懒汉式的区别:

  1. 饿汉式:

    1. 优点:线程是安全的。
    2. 缺点:对象加载时间过长。
  2. 懒汉式:

    1. 优点:延迟对象的创建
    2. 缺点:存在线程安全问题,可以使用多线程锁来解决。

单例模式的优点:
  
  由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。

单例模式-应用场景

  1. 网站的计数器:一般也是单例模式实现,否则难以同步。
  2. 应用程序的日志应用:一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
  3. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
  4. 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。
  5. Application 也是单例的典型应用。
  6. Windows的Task Manager (任务管理器) 就是很典型的单例模式
  7. Windows的Recycle Bin (回收站) 也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

java单例设计模式之懒汉式和饿汉式相关推荐

  1. 【单例设计模式】懒汉式跟饿汉式的区别

    //测试懒汉式跟饿汉式的区别 public class Test{public static void main(String[] args){Inner inner1=Inner.getInnerI ...

  2. 单例设计模式中懒汉式和饿汉式的区别?

    什么时候创建.安全方面.实现方式 1.基本了解 懒汉模式:在类加载的时候不被初始化. 饿汉模式:在类加载的时候就完成了初始化,但是加载比较慢,获取对象比较快. 2.安全方面 懒汉模式在创建对象时不加上 ...

  3. [设计模式]单例模式(懒汉式,饿汉式)

    实现单例步骤: 1.构造函数私有化. 2.增加静态私有的当前类的指针变量. 3.提供静态对外接口,可以让用户获得单例对象. 单例 分为: 1.懒汉式 2.饿汉式 懒汉式 代码如下: class Sin ...

  4. java中的单例模式:懒汉式和饿汉式和静态内部类的书写

    饿汉式: public class SingleTon {//1.私有化构造器private SingleTon(){}//2.在类内部创建一个对象private static SingleTon i ...

  5. java单例设计模式懒汉_Java设计模式之单例设计模式(懒汉、饿汉)

    [toc] Java设计模式之单例设计模式(懒汉.饿汉) 相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试 ...

  6. 单例测试模式中【饿汉式】与【懒汉式】的区别

    package day25.thread;/** /*** @author Mr Chen* @create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ publ ...

  7. Java面试题 实现单例设计模式(懒汉、饿汉)

    懒汉: //懒汉,顾名思义比较懒,在用的时候才实例化 public class Singleton {//创建实例,注意,此时没有newprivate static volatile Singleto ...

  8. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  9. JAVA_Lesson8(传智播客笔记之继承、单例设计模式懒汉式、饿汉式)

    数组对象工具的建立(重要的是这种思想) 主函数是静态的,主函数需要调用的也需要static. 当有2个.java文件时,先编译含有函数功能的.java文件,再编译含主函数的.java文件.(因为主函数 ...

最新文章

  1. ES6箭头函数和模板字符串
  2. Java 汉字转拼音 Scala 汉字转拼音
  3. vSAN 内存或 SSD 拥堵已达到阈值限制 (2071384)
  4. java jvm容器_在Docker容器中运行的JVM的驻留集大小(RSS)和Java总承诺内存(NMT)之间的差异...
  5. 阿里云获ITSS最高等级认证:公共云、专有云服务能力双一级...
  6. 《Adobe After Effects CS4经典教程》——1.9 定制工作区
  7. 医院药库管理系统 v6.26 下载
  8. origin2021如何切换中文界面
  9. 用html做祝福语朋友,祝福朋友工作顺利的祝福语
  10. 做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
  11. Ubuntu强制修改root密码
  12. Win10 21H1发布后的首个更新上线 包含大量的修复内容
  13. 一款完整的手机结构设计过程
  14. 电子商务系统的测试(十四)
  15. 2022年Q3过去了,平常心最重要
  16. ElasticSearch系列03:ES的数据类型
  17. 【系统架构设计师】第一章:操作系统(1.2.2) 信号量与pv操作
  18. Android 开发:通信篇-TCP客户端
  19. javascript上传文件后台接收
  20. linux安装elasticsearch-head (es可视化界面)

热门文章

  1. 实现矩阵的转置原矩阵与转置后矩阵的乘机
  2. 动态SQL_foreach
  3. hub设备_倍思小圆盒四合一HUB转换器功能使用
  4. 树莓派系统用TF卡选购需谨慎
  5. IJCAI 2019 论文:中国团队占 38%,北大南大榜上有名
  6. viso中虚拟框粘贴到word中变实线框解决方法
  7. Python openpyxl匹配单元格内容删除excel指定行
  8. 极速领域服务器不稳定,老玩家泪目,腾讯这款游戏宣布停服
  9. Android TextView设置图标,调整图标大小
  10. 形容计算机专业的诗句,形容专业很厉害的诗句