单例模式,保证了对于某个类,仅仅只有一个实例。
1.非枚举方式
/*
* 此种创建单例的方式会被多线程所干扰,因此如果在多线程环境下,考虑以下方法
* 1.给getInstance()加上synchronized,但会大大降低效率
* 2.用Singleton2的方式
* 3.用双重检查加锁,检查实例是否被创建,若未创建,才同步。
*/
public class Singleton1 {
private static Singleton1 uniqueInstance;
private Singleton1(){} //私有构造器
public static Singleton1 getInstance(){
if(uniqueInstance==null){
uniqueInstance= new Singleton1();
}
return uniqueInstance;
}
}
public class Singleton2 {
private static Singleton2 uniqueInstance=new Singleton2();
private Singleton2(){}
public static Singleton2 getInstance(){
return uniqueInstance;
}
}
2.枚举方式(最佳方式)
/*
* 枚举实现单例模式
* 枚举是实现单例模式的最佳方法
*/
public enum Singleton3{
INSTANCE;
//方法
}