1.饿汉式单例模式
GiantDragon (大龙)只有一只,通过私有化其构造方法,使得外部无法通过new 得到新的实例。
GiantDragon 提供了一个public static的getInstance方法,外部调用者通过该方法获取12行定义的对象,而且每一次都是获取同一个对象。 从而达到单例的目的。
这种单例模式又叫做饿汉式单例模式,无论如何都会创建一个实例

package charactor;public class GiantDragon {//私有化构造方法使得该类无法在外部通过new 进行实例化private GiantDragon(){}//准备一个类属性,指向一个实例化对象。 因为是类属性,所以只有一个private static GiantDragon instance = new GiantDragon();//public static 方法,提供给调用者获取12行定义的对象public static GiantDragon getInstance(){return instance;}}

测试

package charactor;public class TestGiantDragon {public static void main(String[] args) {//通过new实例化会报错
//      GiantDragon g = new GiantDragon();//只能通过getInstance得到对象GiantDragon g1 = GiantDragon.getInstance();GiantDragon g2 = GiantDragon.getInstance();GiantDragon g3 = GiantDragon.getInstance();//都是同一个对象System.out.println(g1==g2);System.out.println(g1==g3);}
}

结果:g1,g2指向同一个对象

2.懒汉式单例模式
懒汉式单例模式与饿汉式单例模式不同,只有在调用getInstance的时候,才会创建实例

package charactor;public class GiantDragon {//私有化构造方法使得该类无法在外部通过new 进行实例化private GiantDragon(){       }//准备一个类属性,用于指向一个实例化对象,但是暂时指向nullprivate static GiantDragon instance;//public static 方法,返回实例对象public static GiantDragon getInstance(){//第一次访问的时候,发现instance没有指向任何对象,这时实例化一个对象if(null==instance){instance = new GiantDragon();}//返回 instance指向的对象return instance;}}

3.什么时候使用饿汉式,什么时候使用懒汉式
饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

懒汉式,是延迟加载的方式,只有使用的时候才会加载。 并且有线程安全的考量(鉴于同学们学习的进度,暂时不对线程的章节做展开)。
使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

看业务需求,如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式
4.单例模式三元素
这个是面试的时候经常会考的点,面试题通常的问法是:

什么是单例模式?

回答的时候,要答到三元素

  1. 构造方法私有化
  2. 静态属性指向实例
  3. public static的 getInstance方法,返回第二步的静态属性

饿汉式单例模式,懒汉式单例模式相关推荐

  1. Python饿汉式和懒汉式单例模式的实现

    # 饿汉式 class Singleton(object):# 重写创建实例的__new__方法def __new__(cls):# 如果类没有实例属性,进行实例化,否则返回实例if not hasa ...

  2. 单例模式(饿汉式和懒汉式)

    以前学习单例的时候,只理解了简单部分.这次看DRP,对单例的饿汉式和懒汉式有了一些认识和对比. 在实际的开发中,有些地方需要一个类只有一个实例.比如:网站在线人数的计数器,再比如IDE中的工具箱之类的 ...

  3. Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。

    Java实现单例的3种普遍的模式,饿汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode;/*** * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, ...

  4. 设计模式—单例模式(饿汉式、懒汉式)

    目录 一.什么是单例模式? 二.单例模式的类型 三.单例模式的公共特征 四.单例模式-饿汉式 五.单例模式-懒汉式 5.1 懒汉式实现方式一(有问题不提倡使用) 5.2 懒汉式实现方式二(提倡使用) ...

  5. 【无标题】单例模式的两种创建方式:饿汉式和懒汉式

    这里写自定义目录标题 单例模式的两种创建方式:饿汉式和懒汉式 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂 ...

  6. 单例模式饿汉式与懒汉式详解

    单例模式饿汉式与懒汉式详解 步骤: 私有构造方法,使得在类的外部不能调用此方法,限制产生多个对象 类初始化时,区分饿汉式与懒汉式的区别 对外部提供调用方法,将创建的对象返回,只能通过类来调用 饿汉式: ...

  7. 单例模式之饿汉式与懒汉式

    常见的单例模式 本文仅讲解单例模式中的饿汉式和懒汉式(双检索) 文章目录 常见的单例模式 前言 一.单例模式的优缺点 二.详解懒汉式.饿汉式 1.饿汉式 2.懒汉式(双检锁) 总结 前言 先来简单的说 ...

  8. 单例模式:饿汉式vs懒汉式

    单例模式是指,在代码运行时,保证某一个类只能被创建一个对象,不可以被创建第二次对象. 饿汉式: 1.先将类中的构造器私有化,用private修饰,防止在外界创建对象 例: private Test() ...

  9. java学习之单例模式(饿汉式与懒汉式)

    ---恢复内容开始--- 设计模式:解决某一类问题最行之有效的方法 java中有23种设计模式 今天学习其中一种:单例设计模式:解决一个类在内存只存在一个对象 想要保证对象唯一. 1.为了避免其他程序 ...

  10. 单例设计模式(饿汉式VS懒汉式)

    什么是单例模式 单例(单个的实例) 1.所谓单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法 2.单例设计模式有两种方式:饿 ...

最新文章

  1. 世界隐形冠军比拼:德国1307家、美国366家、中国68家
  2. WebUI中DataGrid多层表头的终极解决办法
  3. 自定义Word样式模板,设置为默认模板
  4. QString与char *之间的转换
  5. 【数据库系统】编程语言类型说明系统和DDL的区别
  6. NAT (PAT)地址转换技术(讲解+配置)
  7. python mss_Python实现的连接mssql数据库操作示例
  8. mysql 运维常见操作
  9. SpringBoot(Properties)
  10. MySQL 6.子查询
  11. easyUI替换非16x16的图标
  12. linux,内核(kernel)对AD9371配置流程。
  13. 2019年考研篇(2020毕业)
  14. UPC6605 所罗门王的宝藏
  15. Cisco Packet Tracer入门实验之双机互联
  16. python 统计英语文档词汇出现频率,以六级真题为例
  17. 8分频verilog线_时钟分频系列——分数分频电路的Verilog实现
  18. linux中的网络指令ssh ifconfig netstat telnet curl scp
  19. Jenkins搭建.NET自动编译测试并实现半增量部署
  20. import cv2 报错(linux环境)ImportError: libGL.so.1: cannot open shared object file: No such file or direc

热门文章

  1. 城市道路5G智慧监控方案 让感知为安全护航
  2. 和秋叶一起学PPT之绘制表格(课时七)
  3. 融云android系统消息,如何解决 嵌入融云SDK后, Android 手机收不到消息推送?
  4. 调戏木马病毒的正确姿势-基础篇
  5. iOS文本展开收起,使用YYKit展开全文和收起全文,支持图文混排
  6. SQL内连接和外连接的区别、where和on的区别详细介绍
  7. Linux安装JDK并配置环境变量
  8. ERP标准物料编码规则及方法
  9. 如何前后端分离的架构中使用Shiro框架
  10. highcharts 解决数据提示框展示的内容太多 ,部分内容无法显示的问题