起因

最近找工作被面试官问到了设计模式方面的问题,而我一直只会写点简单的代码,从来没认真学过啥设计模式,然后气氛直接就尴尬了。。。
随后急中生智,以前看别人代码 getInstance用的挺多的,应该是叫单例模式吧。所以就回答单例模式。
追问1: 如何解决单例模式的线程安全问题?
好吧,又是一个知识盲区,但是线程安全问题肯定要加锁啊,感觉这一问应该是可以糊弄过去。
追问2: 有没有更好的办法?
这一问把我问沉默了,当时确实第一次面试,有点紧张,所以没有答上来。后来一想,这问题真是TTM简单了好吧。我不把实例化过程放在运行时不就好了,一开始实例化好了不就不用再考虑多线程重复实例化了?然而当时因为紧张,没有说出来。

但是后来一想,然后看了一些单例模式的资料后,发现对这个单例有一些自己的想法。

关于饿汉 单例模式

不知道为什么,人们普遍把一开始就实例化的单例模式叫饿汉模式,可能是因为JVM太饿了,不管用不用的上,先实例化一个再说。
饿汉单例模式确实比加锁的懒汉模式在多线程的时候表现更好一些,但是
疑问1: 会不会存在整个运行过程中不调用该实例,而使饿汉模式不由分说直接实例化的行为变成一种对资源的浪费的情况?
也就是说:你实例化那么早干什么,我还没说要不要用你呢,你杵在那干啥,净占地方!

疑问2: 存不存在要求单例可定制的情况?有没有必要出现一种“多例”模式?
单例解决的是在多个不同地方对同一个类的调用时,该类重复实例化的问题。默认这个类实例化的时候是不传递构造参数的,也就是说 单例模式的实例不可定制。这保证了类可以一开始就 public static instance = new Class,但是同时也限制了自由。
比如一种场景:
我要建立一个Table类,它从单个文件中加载一些数据,然后供其它对象调用。但是实际上数据很多,分了好多文件保存,而我每一次运行时只需要查询其中几个个文件的数据,如果有这种情况,我应该如何用单例模式做到?
设想:多例模式?
对此我就想,可不可以用一种结构实现更灵活的可定制的“多例”模式?
即:在类中维持一个实例集合,这个集合中有多个实例,每个实例有一个Key索引。比如我要查询第4个文件的数据,则调用 getInstance(4),如果发现没有相应实例,则Table类在实例集合中实例化一个构造参数为4个Table对象。如此实现一个类似于缓冲的效果?
一个类根据不同参数,产生多个不同的实例,以适应不同的调用。在保证只有同一个类的基础上,实现实例的多样化和自动管理。

这个多例模式我觉得是挺可行的,刚学设计模式,或许应该有更好的办法可以解决上面说道的Table的问题,或许我这个Table情景只是极特殊情况,根本没有实际价值。。。

PS:好吧,继续学习后发现,其实已经有多例模式了,我能想到的人家早就想到了,还想得比我完善[泪],看完不要骂我。

关于Java单例模式的思考相关推荐

  1. Java单例模式个人总结(实例变量和类变量)

    Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...

  2. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  3. Java单例模式优化写法

    转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...

  4. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  5. Java 单例模式:懒加载(延迟加载)和即时加载

    Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...

  6. Java单例模式:为什么我强烈推荐你用枚举来实现单例模式

    写在前面--原作的这篇文章真的写的非常的简洁,逻辑清晰,将Java单例模式的各种写法写的非常清楚,并介绍了用枚举实现单例的最佳实践. 单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的 ...

  7. java单例模式 三种_三种java单例模式概述

    在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...

  8. 什么是java单例模式?

    关于java单例模式的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java单例模式的一个总结.此文内容涉及java单例模式的基本概念,以及什单例模式的优缺点,希望对大家有所帮助. 什 ...

  9. 比心app源码,Java 单例模式

    比心app源码,Java 单例模式实现的相关代码 概述:单例模式是指在内存中永远只有一个类的实例. 有利于节约内存和保证共享计算的结果正确,方便管理. 单例模式的形式 饿汉式单例:在获取单例对象之前对 ...

最新文章

  1. linux获取最高权限并取消_Linux 更新glibc 漏洞 可以获取最高权限
  2. 学好web前端开发要注意哪些问题
  3. 缓存cache和缓冲区buffer
  4. Python基础——PyCharm版本——第五章、循环(for、while、break、continue)
  5. position的四种属性
  6. python中的print
  7. Android之解决NestedScrollView嵌套RecyclerView部分手机返回到这个页面Recyclerview顶部,而不是页面NestedScrollView顶部
  8. 论文浅尝 | CoRR - 面向复杂知识问答的框架语义解析方法
  9. 【机器学习】监督学习--KNN(最近邻)算法
  10. 微软水下数据中心“浮出水面”、GitHub代码保存在北极,数据黑科技贮藏方式大曝光!...
  11. 高薪编程,品牌公司——人往高处走,作为程序员的你够格吗
  12. 如何使用WordPress搭建网站
  13. CodeForces - 729D
  14. RequireJS进阶(一)
  15. (转)从业10年,芝加哥交易员王辰解码高频交易
  16. 3DEC离散元数值模拟技术与应用
  17. arcgis中的重分类
  18. 如何提高程序员的键盘使用效率之我见
  19. python三菱fx3u通讯_【案例】三菱FX3UPLC的无线通讯讲解
  20. GeekOS操作系统课程设计 project1

热门文章

  1. 人月神话(四)削足适履、提纲挈领、未雨绸缪
  2. 习题:一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。
  3. 查看IP和MAC地址的命令
  4. Photoshop路径与笔刷轻松制作轻纱漫舞
  5. unhandled system error, NCCL version 2.7.8
  6. DevOps在证券互联网研发中的应用与实践
  7. 2022-2028全球及中国健康资讯交换(HIE)行业研究及十四五规划分析报告
  8. MySQL字段约束及多表查询---讲解三
  9. django xadmin修改“管理”“认证和授权”的菜单名
  10. Mybatis-Plus(连接Hive)