单例模式

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

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

  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. Linux进程ID号--Linux进程的管理与调度(三)
  2. IPod在Linux下的实战
  3. PHP cURL可以在单个请求中检索响应标头和正文吗?
  4. linux平台 一个简单的helloworld动态库的制作与使用
  5. 迪普工业以太网交换机产品线
  6. SpringBoot中定时任务与异步定时任务的实现
  7. Spring Cloud实战小贴士:Zuul统一异常处理(三)【Dalston版】
  8. 127.0.0.1 zxt.php,恭喜您!序列号购买成功!
  9. XCode中的Debug View Hierarchy功能
  10. 加载JDBC驱动程序
  11. 服务器2016系统看图软件,PhotoX:Mac上最好用的免费看图软件
  12. 希尔伯特空间(Hilbert空间)
  13. IDEA集成有道翻译插件/maven帮助插件/mybatis插件
  14. 智能计算/计算智能、仿生算法、启发式算法的区别与关系?
  15. JavaScript使用drag事件
  16. bzoj 3772 :精神污染 线段树+打标记 or 主席树
  17. 计算机网络基础冷知识,技术控必备冷知识
  18. 生活小技巧 | win10开热点给手机使用
  19. 「星火计划沙龙视频」Angel核心推荐算法及其应用探秘
  20. 微视点:网传社交游戏公司“五分钟”面临倒闭,引发各方热议

热门文章

  1. 小白勿进!安卓版java游戏盒下载
  2. 前端HTML5十大新特性详细总结
  3. HTML5的十大新特性
  4. 使用傅里叶描述子识别形状(matlab)
  5. 酷狗音乐推出酷狗小程序开放平台
  6. 搭建hexo博客给公众号制作留言功能
  7. 8.3 综合案例2.0-扫码支付二维码生成
  8. WiFi学习知识点整理
  9. LT、LE、EQ、NE、GE、GT 符号的含义
  10. consumer grep has no active members