本篇文章主要介绍了"Java设计模式—单例设计模式Singleton Pattern完全解析",主要涉及到线程池,单例模式,静态属性,github,设计模式方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最...
Singleton instance = Singleton.getInstance();
得到这个实例后就可以访问这个类中的方法了。
这种方式跟饿汉式方式采用的机制类似,但又有不同。两者都是采用了类装载的机制来保证初始化实例时只有一个线程。不同
的地方在饿汉式方式是只要Singleton类被装载就会实例化,没有Lazy-Loading的作用,而静态内部类方式在Singleton类被装载时
并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonHolder类,从而完成Singleton的实例化。
类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程是
无法进入的。
优点:避免了线程不安全,延迟加载,效率高。
4.8枚举[极推荐使用]public enum SingletonEnum {
instance;
private SingletonEnum() {}
public void method(){
}
}
访问方式
SingletonEnum.instance.method();
可以看到枚举的书写非常简单,访问也很简单在这里SingletonEnum.instance这里的instance即为SingletonEnum类型的引用所以得到它就可以调用枚举中的方法了。
借助JDK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。可能是因为枚举在JDK1.5中才添加,所以在实际项目开发中,很少见人这么写过,这种方式也是最好的一种方式,如果在开发中JDK满足要求的情况下建议使用这种方式。
5、总结
在真正的项目开发中一般采用4.1、4.6、4.7、4.8看你最喜欢哪种写法了,一般情况下这几种模式是没有问题的,为了装逼我一般采用4.6这种写法,我们经常用的Android-Universal-Image-Loader这个开源项目也是采用的4.6这种写法,其实最安全的写法是4.8即枚举,它的实现非常简单而且最安全可谓很完美,但是可能是因为只支持JDK1.5吧又或者是因为枚举大家不熟悉所以目前使用的人并不多,但是大家可以尝试下。另外当我们使用反射机制时可能不能保证实例的唯一性,但是枚举始终可以保证唯一性,具体请参考次博客:http://blog.csdn.net/java2000_net/article/details/3983958但是一般情况下很少遇到这种情况。
6、单例模式的在面试中的问题