模式精粹——单例模式
单例模式,又叫单态模式,单件模式。想必大家对此都不谋生,开发中会经常用到,这里我想阐述一下我个人的观点,如有不对,望予指正。
首先,我们为了在开发中提高程序的性能,需要某些类只向外提供一个实例,并设置一个全局访问点,我们由此来访问这个单独对象。
要实现单例类很简单,只需满足下面三个条件就好了:
1.私化,保护化类的构造器。
2.提供一个静态对象。
3.提供访问上述对象的静态方法。
单例类的实现方式主要分饿汉式,即在类加载时就实例化对象;懒汉式,即第一次调
用时才实例化对象,现在网络上随处可以看到上述方式的具体实现,笔者就不赘述了。不过懒汉式需要考虑惰性初始化所引发的线程问题,注意线程锁的设置。
另外,也可以动态的去构造一个单例模式,如:public static final Singleton INSTANCE = new Singleton();这种方式似乎不需要去额外更改API,就可以产生一个单例实例,比较灵活。
当然开发中经常也会看到使用HashMap来记录一组单例实例。
单例模式很少单独使用,经常会和其他模式一并使用,来提高系统的整体效率。
当然在多加载器,多JVM的情况下我们还需要考虑其他的问题,单例在此情况下似乎变得不再那么可靠,记住,尽量不要使用带有状态的单例类。多数情况下单例类是向我们提供某些工具性的功能。