2017-11-16 16 views
1

なぜAndroid/Javaでシングルトンクラスが使用されているのですか?同じ機能のときには、が静的​​なフィールドとメソッドを持つクラスを使用して表示されると思われますか?シングルトンクラスと静的メソッドとフィールドの比較?

public class SingletonClass implements Serializable { 

    private static volatile SingletonClass sSoleInstance; 
    private int foo; 

    //private constructor. 
    private SingletonClass(){ 

     //Prevent form the reflection api. 
     if (sSoleInstance != null){ 
      throw new RuntimeException("Use getInstance() method to get the single instance of this class."); 
     } 

     foo = 0; 
    } 

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

     return sSoleInstance; 
    } 

    //Make singleton from serialize and deserialize operation. 
    protected SingletonClass readResolve() { 
     return getInstance(); 
    } 

    public void setFoo(int foo) { 
     this.foo = foo; 
    } 

    public int getFoo() { 
     return foo; 
    } 
} 
+1

あなたは[This](https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern)の議論を行ってください。あなたが既にいないなら! – ADM

+0

ありがとう、私はこの質問を削除する必要がありますか? – fadedbee

+1

それは正当な質問です。しかし、すべての議論はすでに私が言及したスレッドで行われています。だから、重複してマークするだけです。 – ADM

答えて

2

public class StaticClass { 
    private static int foo = 0; 

    public static void setFoo(int f) { 
     foo = f; 
    } 

    public static int getFoo() { 
     return foo; 
    } 
} 

これは主にsingletonsstatic typesの制限によるものです。

  • 静的型はインターフェイスを実装できず、基本クラスから派生しています。
  • 上記から、静的型が高い結合を引き起こすことがわかります。テストや異なる環境で他のクラスを使用することはできません。
  • 静的クラスは、依存関係注入を使用して挿入できません。
  • シングルトンは、モックやシムをはるかに簡単です。
  • シングルトンは簡単にトランジェントに変換できます。

これは私の頭の上からいくつかの理由です。これはおそらくすべてではありません。

関連する問題