web-dev-qa-db-ja.com

シングルトンクラスと静的クラスの違いは?

可能性のある重複:
静的クラスとシングルトンパターンの違い?
Javaのシングルトンパターンと静的クラスの違いは何ですか?

こんにちは私は明確に得ていませんシングルトンクラスと静的クラスの違いは何ですか?誰かがこれを例で詳しく説明できますか?

27
giri

シングルトンクラス:シングルトンクラスは、クラスローダーごとに1つのインスタンスのみが存在できるクラスです。

静的/ヘルパークラス(静的フィールド/メソッドのみを持つクラス):このクラスのインスタンスは存在しません。定数またはヘルパーメソッドとして直接アクセスできるのは、フィールドとメソッドのみです。

以下からこれを参照します ブログ "Javaの静的クラス" で詳しく説明しています。ブログには、同じことを説明する例もあります。

シングルトンの例:

public class ClassicSingleton {
    private static ClassicSingleton instance = null;

    private ClassicSingleton() {
        // Exists only to defeat instantiation.
    }

    public static ClassicSingleton getInstance() {
        if (instance == null) {
            instance = new ClassicSingleton();
        }
        return instance;
    }
}

静的クラスの例:

/**
 * A helper class with useful static utility functions.
 */
public final class ActionHelper {

    /**
     * private constructor to stop people instantiating it.
     */
    private ActionHelper() {
        // this is never run
    }

    /**
     * prints hello world and then the users name
     * 
     * @param users
     *            name
     */
    public static void printHelloWorld(final String name) {
        System.out.println("Hello World its " + name);
    }

}

したがって、2つの例の違いは何ですか。また、インスタンス化する必要がない、またはインスタンス化する必要のないクラスの場合、2番目のソリューションの方が優れていると思います。まず、クラスの1つのインスタンスを作成する場合、シングルトンパターンは非常に便利です。ヘルパークラスの場合、クラスのコピーをインスタンス化することは望ましくありません。シングルトンクラスを使用しない理由は、このヘルパークラスでは変数を使用しないためです。シングルトンクラスは、必要な変数のセットが1つだけ含まれ、メソッドがそれらの変数を使用したが、ヘルパークラスでは渡された変数(finalにする)以外の変数を使用しない場合に役立ちます。このため、変数が不要で、このクラスをインスタンス化する人がいないため、シングルトンインスタンスが必要だとは思いません。だから、誰かがクラスをインスタンス化したくない場合、通常は何らかのヘルパー/ユーティリティクラスがある場合、私は静的クラスと呼ばれるものを使用します。プライベートコンストラクタを持つクラスは、静的メソッドのみで構成され、任意の変数。

同じ答えが私の答えからも参照されます here

18
YoK

古いque/ans on SO: 静的クラスとシングルトンパターンの違い?

静的クラスとは、静的メソッドのみを備えたクラスのことであり、より良いWordは「関数」です。静的クラスで具体化される設計スタイルは、純粋に手続き型です。

一方、Singletonは、OOデザインに固有のパターンです。これは、ポリモーフィズムなどの固有の可能性をすべて備えた)オブジェクトのインスタンスであり、作成手順は次のとおりです。その特定のロールのインスタンスが存続期間全体にわたって常に1つのみであることを保証します。

16
Pranay Rana

シングルトンは静的と比較してキーワードではないため、違いはask.beの正しい方法ではありません。 「いつどれを選択するのか?」のように尋ねるべきです静的クラスに対するシングルトンクラスの利点は何ですか、これらの質問は設計段階にあります。

シングルトン:使用法:グローバル構成として機能するクラス、例:1つのデータベース接続を持つソフトウェアの試用版、jvmごとのJDKランタイムクラスインスタンス。

いつ行くべきか:1.コードの開発中に、このシングルトンクラスを通常のクラスに変換するか、サブクラス化を許可する必要がある明日など、前方互換性を考えます。 2.このシングルトンクラスが重い場合、遅延読み込み機能を提供できます。

static:Usage:基本的に変換を行うクラス、ユーティリティ関数。 Mathクラスを確認してください。

実行するタイミング:1.ヘルパークラス。API開発のすべてのクラスで使用されます。

欠点:1.クラスが熱心にロードされます。

他の人からのポイントを期待しています。

6
Dead Programmer

パターンとパターンの実装方法の違いです。

シングルトンパターンは、特にJava言語に関連付けられていません。使用する言語に応じて、クラスをシングルトンにするさまざまな方法があります。多くのOO言語は静的変数に相当するものを使用してシングルトンを作成しますが、他の言語では異なる手法を使用する場合があります。

また、シングルトンを実装するいくつかの方法が他の方法よりも優れています。シングルトンを実装する1つの良い方法は、ファクトリメソッドを介してそのシングルトンへのアクセスを適切にカプセル化することです。

public class Example {
    private static final Example SINGLETON = new Example();

    public static Example getInstance() { return SINGLETON; }

    private Example() { /* Constructor */ }
}

この手法を使用すると、シングルトンの遅延ロード、サブクラスとの置換、構成によるシングルトンの初期化の管理など、あらゆる種類の高度な処理を実行できます。

4
oditiwebs.com

シングルトンはクラスのタイプではなく、デザインパターンです。 Singletonを使用すると、特定のクラスの1つのインスタンスのみが単一のJava Virtual Machine。Singletonパターンの最新の実装で使用されるようになります。ちなみに、古い実装ではプライベートコンストラクターを使用し、静的フィールドの単一インスタンスへの参照を保存します。

静的クラスは常に内部クラスとは対照的に、周囲のクラスのインスタンス変数にアクセスできないメンバークラスです。


静的クラスの例

public class A {
  public static class B {        
  }     
  public        int notAccessibleForB;
  public static int    accessibleForB;
}

シングルトンパターン(単純な古いスタイル)

public final class Singleton {
  public final static Singleton INSTANCE = new Singleton();
  private Singleton(){}
}

シングルトンパターン(シンプルモダンスタイル)

public enum Singleton {
   INSTANCE;
}
1
Andreas_D