什么是单例模式?
确保一个类只有一个实例并提供全局访问点。
注意:
性能最好的单例模式#确保多线程环境下也是只有一个实例
#确保反射机制下也是只有一个实例,但这机制下连一个实例都获取不到,谁能获取得到一个实例告知我!
private SingletonClass1ThreadSafe() {
//阻止通过反射机制创建多个实例
if(singletonClass1 != null) {
throw new IllegalStateException();
}
}
/*** #利用内部类后加载机制:内部类只有被调用时才会去初始华内部类并初始化内部类的静态成员变量;* #线程安全* #无需用到java一些机制来保证线程安全,比如volatile或者synchronized* #阻止了反射机制创建对象* @author sunyq**/public class InitializingOnDemandHolderIdiom {
/*** 私有构造函数*/private InitializingOnDemandHolderIdiom() {//阻止反射机制创建对象if(HelperHolder.INSTANCE != null){throw new IllegalStateException();}}public static InitializingOnDemandHolderIdiom getInstance() {return HelperHolder.INSTANCE;}
private static final class HelperHolder{private static InitializingOnDemandHolderIdiom INSTANCE = new InitializingOnDemandHolderIdiom();}
}
全局变量和单例模式的区别
(1)全局变量是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局访问功能,但是它并不能保证应用程序只有一个实例;编码规范也明确的指出应该要少使用全局变量,因为过多的使用全局变量会造成代码难读;全局变量并不能实现继承。
(2)、单例模式虽然在继承上不能很好的处理,但是还是可以实现继承的;单例模式在类中保存了它的唯实例这个类,可以保证只能创建一个实例,同时它还提供了一个访问该唯一实例的全局访问点。
联系客服