关于Java单例模式的思考

起因

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

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

关于饿汉 单例模式

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值