关于Java单例模式的思考
起因
最近找工作被面试官问到了设计模式方面的问题,而我一直只会写点简单的代码,从来没认真学过啥设计模式,然后气氛直接就尴尬了。。。
随后急中生智,以前看别人代码 getInstance用的挺多的,应该是叫单例模式吧。所以就回答单例模式。
追问1: 如何解决单例模式的线程安全问题?
好吧,又是一个知识盲区,但是线程安全问题肯定要加锁啊,感觉这一问应该是可以糊弄过去。
追问2: 有没有更好的办法?
这一问把我问沉默了,当时确实第一次面试,有点紧张,所以没有答上来。后来一想,这问题真是TTM简单了好吧。我不把实例化过程放在运行时不就好了,一开始实例化好了不就不用再考虑多线程重复实例化了?然而当时因为紧张,没有说出来。
但是后来一想,然后看了一些单例模式的资料后,发现对这个单例有一些自己的想法。
关于饿汉 单例模式
不知道为什么,人们普遍把一开始就实例化的单例模式叫饿汉模式,可能是因为JVM太饿了,不管用不用的上,先实例化一个再说。
饿汉单例模式确实比加锁的懒汉模式在多线程的时候表现更好一些,但是
疑问1: 会不会存在整个运行过程中不调用该实例,而使饿汉模式不由分说直接实例化的行为变成一种对资源的浪费的情况?
也就是说:你实例化那么早干什么,我还没说要不要用你呢,你杵在那干啥,净占地方!
疑问2: 存不存在要求单例可定制的情况?有没有必要出现一种“多例”模式?
单例解决的是在多个不同地方对同一个类的调用时,该类重复实例化的问题。默认这个类实例化的时候是不传递构造参数的,也就是说 单例模式的实例不可定制。这保证了类可以一开始就 public static instance = new Class,但是同时也限制了自由。
比如一种场景:
我要建立一个Table类,它从单个文件中加载一些数据,然后供其它对象调用。但是实际上数据很多,分了好多文件保存,而我每一次运行时只需要查询其中几个个文件的数据,如果有这种情况,我应该如何用单例模式做到?
设想:多例模式?
对此我就想,可不可以用一种结构实现更灵活的可定制的“多例”模式?
即:在类中维持一个实例集合,这个集合中有多个实例,每个实例有一个Key索引。比如我要查询第4个文件的数据,则调用 getInstance(4),如果发现没有相应实例,则Table类在实例集合中实例化一个构造参数为4个Table对象。如此实现一个类似于缓冲的效果?
一个类根据不同参数,产生多个不同的实例,以适应不同的调用。在保证只有同一个类的基础上,实现实例的多样化和自动管理。
这个多例模式我觉得是挺可行的,刚学设计模式,或许应该有更好的办法可以解决上面说道的Table的问题,或许我这个Table情景只是极特殊情况,根本没有实际价值。。。
PS:好吧,继续学习后发现,其实已经有多例模式了,我能想到的人家早就想到了,还想得比我完善[泪],看完不要骂我。
关于Java单例模式的思考相关推荐
- Java单例模式个人总结(实例变量和类变量)
Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...
- Java 单例模式探讨
以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...
- Java单例模式优化写法
转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...
- Java单例模式的几种实现方式
Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...
- Java 单例模式:懒加载(延迟加载)和即时加载
Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...
- Java单例模式:为什么我强烈推荐你用枚举来实现单例模式
写在前面--原作的这篇文章真的写的非常的简洁,逻辑清晰,将Java单例模式的各种写法写的非常清楚,并介绍了用枚举实现单例的最佳实践. 单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的 ...
- java单例模式 三种_三种java单例模式概述
在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...
- 什么是java单例模式?
关于java单例模式的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java单例模式的一个总结.此文内容涉及java单例模式的基本概念,以及什单例模式的优缺点,希望对大家有所帮助. 什 ...
- 比心app源码,Java 单例模式
比心app源码,Java 单例模式实现的相关代码 概述:单例模式是指在内存中永远只有一个类的实例. 有利于节约内存和保证共享计算的结果正确,方便管理. 单例模式的形式 饿汉式单例:在获取单例对象之前对 ...
最新文章
- Watson AI遭遇逆风 IBM否认停售:只是转移了重心
- 热敏电阻如何查表计算温度_如何为温度传感器选择正确的热敏电阻
- 使用Java进行串口SerialPort通讯
- Android插件化开发基础之Java动态代理(proxy)机制的简单例子
- java多线程创建runnable_Java线程池和runnables创建runnables
- 【网站】网站不能在QQ,微信中访问,申诉办法
- java中paint_java中paint()的具体用法是什么?
- CCF NOI1012 变换密码
- JAVA的if用法比如if(...){} 和if()没有区别
- 飞思卡尔16位单片机(二)——CodeWarrior开发环境搭建及新建、调试工程
- 操作系统系统笔记整理
- 在html中在tools作用,图层蒙版的作用是什么
- unison 安装使用
- 近两年半导体重大收购兼并案
- 局域网资产发现过程(利用工具nmap、masscan)
- 算POTCAR要上心!
- C++小游戏之停电救援
- Stata:时间序列中的格兰杰因果检验
- 计算机机房接地方案,机房防雷接地系统设计方案.doc
- Html5基础知识笔记