java单例设计模式之懒汉式和饿汉式
单例模式
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
如果我们要让类在一个虚拟机中只能产生一个对象:
将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。
提供一个public方法作为该类的访问点,用于创建该对象,必须是static修饰的,因为在类的外部开始还无法得到类的对象,只能通过类调用该方法。
缓存已创建的对象,否则该类无法知道是否已经创建了对象。静态方法只能访问类中的静态成员变量,所以该类对象的变量也必须定义成静态的。
单例设计模式一般有两种方式:饿汉式和懒汉式。
饿汉式:
// 饿汉式
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;}}
饿汉式和懒汉式的区别:
饿汉式:
- 优点:线程是安全的。
- 缺点:对象加载时间过长。
懒汉式:
- 优点:延迟对象的创建
- 缺点:存在线程安全问题,可以使用多线程锁来解决。
单例模式的优点:
由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。
单例模式-应用场景
- 网站的计数器:一般也是单例模式实现,否则难以同步。
- 应用程序的日志应用:一般都使用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。
- 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。
- 项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,都生成一个对象去读取。
- Application 也是单例的典型应用。
- Windows的Task Manager (任务管理器) 就是很典型的单例模式
- Windows的Recycle Bin (回收站) 也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
java单例设计模式之懒汉式和饿汉式相关推荐
- 【单例设计模式】懒汉式跟饿汉式的区别
//测试懒汉式跟饿汉式的区别 public class Test{public static void main(String[] args){Inner inner1=Inner.getInnerI ...
- 单例设计模式中懒汉式和饿汉式的区别?
什么时候创建.安全方面.实现方式 1.基本了解 懒汉模式:在类加载的时候不被初始化. 饿汉模式:在类加载的时候就完成了初始化,但是加载比较慢,获取对象比较快. 2.安全方面 懒汉模式在创建对象时不加上 ...
- [设计模式]单例模式(懒汉式,饿汉式)
实现单例步骤: 1.构造函数私有化. 2.增加静态私有的当前类的指针变量. 3.提供静态对外接口,可以让用户获得单例对象. 单例 分为: 1.懒汉式 2.饿汉式 懒汉式 代码如下: class Sin ...
- java中的单例模式:懒汉式和饿汉式和静态内部类的书写
饿汉式: public class SingleTon {//1.私有化构造器private SingleTon(){}//2.在类内部创建一个对象private static SingleTon i ...
- java单例设计模式懒汉_Java设计模式之单例设计模式(懒汉、饿汉)
[toc] Java设计模式之单例设计模式(懒汉.饿汉) 相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试 ...
- 单例测试模式中【饿汉式】与【懒汉式】的区别
package day25.thread;/** /*** @author Mr Chen* @create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ publ ...
- Java面试题 实现单例设计模式(懒汉、饿汉)
懒汉: //懒汉,顾名思义比较懒,在用的时候才实例化 public class Singleton {//创建实例,注意,此时没有newprivate static volatile Singleto ...
- java单例设计模式_Java设计模式之单例模式详解
在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...
- JAVA_Lesson8(传智播客笔记之继承、单例设计模式懒汉式、饿汉式)
数组对象工具的建立(重要的是这种思想) 主函数是静态的,主函数需要调用的也需要static. 当有2个.java文件时,先编译含有函数功能的.java文件,再编译含主函数的.java文件.(因为主函数 ...
最新文章
- ES6箭头函数和模板字符串
- Java 汉字转拼音 Scala 汉字转拼音
- vSAN 内存或 SSD 拥堵已达到阈值限制 (2071384)
- java jvm容器_在Docker容器中运行的JVM的驻留集大小(RSS)和Java总承诺内存(NMT)之间的差异...
- 阿里云获ITSS最高等级认证:公共云、专有云服务能力双一级...
- 《Adobe After Effects CS4经典教程》——1.9 定制工作区
- 医院药库管理系统 v6.26 下载
- origin2021如何切换中文界面
- 用html做祝福语朋友,祝福朋友工作顺利的祝福语
- 做了一个淘宝内部优惠券分享平台支持微信公众号以及网站
- Ubuntu强制修改root密码
- Win10 21H1发布后的首个更新上线 包含大量的修复内容
- 一款完整的手机结构设计过程
- 电子商务系统的测试(十四)
- 2022年Q3过去了,平常心最重要
- ElasticSearch系列03:ES的数据类型
- 【系统架构设计师】第一章:操作系统(1.2.2) 信号量与pv操作
- Android 开发:通信篇-TCP客户端
- javascript上传文件后台接收
- linux安装elasticsearch-head (es可视化界面)