懒汉模式:在单线程下工作是没问题的,但是多线程情况下会出问题。 public class Singleton { private static Singleton singleton; // 构造函数私有化 private Singleton () {} // 提供一个全局的静态方法 public static Singleton getSingleton () { if (singleton== null) { singleton= new Singleton (); } return singleton; } 恶汉模式:资源使用率不高,即使getSingleton()不会执行,但是该类仍然会初始化。 public class Singleton{ // 在类被加载进入内存的时候就创建单一的Singleton对象 public static final Singleton singleton= new Singleton(); // 构造函数私有化 private Singleton() {} // 提供一个全局的静态方法 public static Singleton getSingleton() { return singleton; } } 优化后的懒汉模式:解决了多线程操作的问题,也避免了资源浪费。 public class Singleton{ private static Singleton singleton; // 构造函数私有化 private Singleton() {} // 提供一个全局的静态方法 public static Singleton getSingleton() { if (singleton== null) { synchronized (Singleton.class) { if (singleton== null) { singleton= new Singleton(); } } } return singleton; } } 静态内部类:调用getIntance()方法的时候,虚拟机才会加载SingleTonHoulder静态内部类,线程安全,保证单例的唯一性,延迟了对象的实例化。 public class SingleTon { //将构造函数私有化 private SingleTon() {} public static SingleTon getInstance() { return SingleTonHoulder.singleTon ; } //静态内部类 public static class SingleTonHoulder { private static final SingleTon singleTon = new SingleTon(); } } 枚举实现:Android开发中不推荐使用(Enums ofter require more than twice as much memory as static constants. You should strictly avoid using enums on Android.)。 public enum Singleton{ //定义一个枚举的元素,它就是Singleton的一个实例 INSTANCE; public void toDO(){ // do something ... } public static void main(String[] args){ Singleton singleton = Singleton.INSTANCE; singleton.doSomething(); } 使用容器统一管理:维护一个统一的管理类,注入多种单例类型,在使用时根据key获取对应类型的单例对象。 public class SingletonManager { //定义一个map容器 private static Map<String, Object> objMap = new HashMap<>(); private SingletonManager () {} //添加一个单例实例 public static void addSingleton(String key, Object instance) { if (!objMap.containsKey(key)) { objMap.put(key, instance); } } //根据key得到一个单例实例 public static getSingleton(String key) { return objMap.get(key); } } 这么多种单例模式,使用哪种方式可以根据项目本身来选择,对于Android开发来说通常很少有高并发的情况,所以使用哪种方式没有太大影响,个人推荐静态内部类实现方式,单例模式如需Context时,最好是使用Application 的Context。