1.饿汉
如果应用程序总是创建并使用单例实例或在创建和运行时开销不大
class Single { private Single(){} private static Single single= new Single(); public static Single getInstance(){ return single; }
2.懒汉
如果开销比较大,希望用到时才创建就要考虑延迟实例化
Singleton的初始化需要某些外部资源(比如网络或存储设备)
class Single { private Single(){} private static Single single= null; public static Single getInstance(){ if ( single == null ) { synchronized (Single.class) { if ( single == null ) { single = new Single(); } } } return single; } }
3.静态内部类
class Single { private Single(){} private static class SingleHandler{ private static Single single = new Single(); } public static Single getInstance(){ return Single.SingleHandler.single; }
4.枚举
public class Single { private Single(){} public enum SingleEnum { singleHandler; private Single single; private SingleEnum () { single = new Single(); } public Single getSingle() { return single; } } public static Single getInstacne() { return SingleEnum.singleHandler.getSingle(); } }