保证一个类仅有一个实例,并提供一个访问它的全局访问点。
好处:
(1)频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常客观的一笔开销。
(2)由于new的次数减少,对系统内存的使用频率降低,减轻GC压力,缩短GC停顿时间。
其UML图如下:
public class Singleton{ private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }
还有一种方式就是懒加载,实现方式如下:
public class LazySingleton{ private LazySingleton(){} private static LazySingleton instance = null; public static syncharonized LazySingleton getInstance(){ if(instance == null){ instance = new LazySingleton(); } return instance; } }
还有中方式能聚会上面两个的有点:
public class StaticSingleton{ private StaticSingleton(){} private static class SingletonHolder{ private static StaticSingleton instance = new StaticSingleton(); } public static StaticSingleton getInstance(){ return SingletonHolder.instance; } }