利用的是内部类配合枚举实现的单例模式: 优点:

  • 枚举实现的单例模式,不但可以防止利用反射强行构建单例对象,而且可以防止枚举类对象被反序列化的时候,保证反序列对象返回的结果是同一对象;
  • 利用内部类可以实现懒加载,从外部无法访问MyEnumSingle,只有当调用
  • 这种方式是线程安全的。 MySingleton.MyEnumSingle.INSTANCE.getInstance() 才能得到单例对象。

/**
 * 最完美的单例模式
 * @author Administrator
 *
 */
public class MySingleton {

	private enum MyEnumSingle{
		INSTANCE;
		private MySingleton singleOne;
		
		private MyEnumSingle(){
			System.out.println("初始化单例");
			singleOne = new MySingleton();
		}
		
		public MySingleton getInstance(){
			return singleOne;
		}
	}
	
	private MySingleton(){}
	
	public static MySingleton getInstance(){
		return MyEnumSingle.INSTANCE.getInstance();
	}
	
}