Singleton总是在创建一个新实例

时间:2017-01-16 04:38:34

标签: java android singleton

我正在尝试在我的Android应用程序中使用单例框架。当我调用getInstance()时,它初始化很好,但是当我在另一个活动中调用getInstance()时,它总是创建一个新实例,而不是返回已经创建的实例。

public class LinkedList {

private static LinkedList theList;

public static LinkedList getInstance(){
    if(theList == null){
        System.out.println("New List*********************");
        return new LinkedList();
    }
    else
        return theList;
}

private LinkedList(){
    defaultPopulate();
}

}

我很好奇是否因为我是Android编程新手而失踪了一些小事。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

在你的getInstance方法中,你需要确保将List设置为刚刚创建的新对象,而不是只返回一个新的LinkedList。

public static LinkedList getInstance(){
    if(theList == null){
        System.out.println("New List*********************");
        theList = new LinkedList();
    }
    return theList;
}

答案 1 :(得分:1)

您实现单例实例

有多种类型
  1. 急切初始化:
  2. 在急切的初始化中,Singleton类的实例是在类加载时创建的,这是创建单例类的最简单方法。

    public class SingletonClass {
    
        private static volatile SingletonClass sSoleInstance = new SingletonClass();
    
        //private constructor.
        private SingletonClass(){}
    
        public static SingletonClass getInstance() {
            return sSoleInstance;
         }
    }
    
    1. 延迟初始化:
    2. 此方法将检查是否已创建该类的任何实例?如果是,那么我们的方法(getInstance())将返回该旧实例,如果没有,则它在JVM中创建单例类的新实例并返回该实例

      public class SingletonClass {
      
          private static SingletonClass sSoleInstance;
      
          private SingletonClass(){}  //private constructor.
      
          public static SingletonClass getInstance(){
              if (sSoleInstance == null){ //if there is no instance available... create new one
                  sSoleInstance = new SingletonClass();
              }
      
             return sSoleInstance;
         }
      }
      

      还有一些需要考虑的内容,例如 Java Reflection API 线程安全&序列化安全 Singleton。

      此Blogpost包含各种Singleton设计模式,有助于查看此https://medium.com/@kevalpatel2106/digesting-singleton-design-pattern-in-java-5d434f4f322#.mclooglq8