Javaシングルトンパターンとは何ですか

王林
リリース: 2019-11-11 14:37:15
オリジナル
2719 人が閲覧しました

Javaシングルトンパターンとは何ですか

シングルトン パターンとは何ですか?

シングルトン パターンは、クラスのインスタンスがシングルトンであることを保証する一般的な設計パターンです。

シングルトン モードの利点:

(1) まず第一に、メモリ リソースを節約する必要があります。公開されたメソッドを通じてインスタンスがどれほど頻繁に作成されたとしても、オブジェクトはシステム メモリ内の同じインスタンス オブジェクトです;

(2) 柔軟性、すべてのインスタンスの作成はこのクラスによって制御されるため、すべてのこのクラスはインスタンス化プロセスを柔軟に変更できます。

(3) インスタンスへの制御されたアクセス。シングルトン クラスは、一意のインスタンスへの制御されたアクセスを簡単に制御できます。

シングルトン モードの欠点:

(1 ) シングルトン モードにはインターフェイスがなく、拡張が簡単ではありません;

(2) リフレクション モードを使用してシングルトンを作成することはできません。そうしないと、新しいオブジェクトがインスタンス化されます;

(3)遅延シングルトンを使用する サンプル モードを使用するときはスレッド セーフティの問題に注意してください;

シングルトン モードを実装する方法:

シングルトン メソッド

package index;
public class Superman {
    //空的构造器
    private Superman(){}
    
    //实例化对象
    private static Superman supermanInstance = new Superman();
    
    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        return supermanInstance;
    }
}
ログイン後にコピー

シングルトンはクラスがロードされるときに事前に新しく作成されており、最初に supermanInstance オブジェクトがインスタンス化されます。プログラムがこのオブジェクトを呼び出す必要があるかどうかに関係なく、すでに準備が整っています。ロードでは、プログラムの負荷を軽減するために、ほとんどの場合、遅延ロードが必要となるため、シングルトンを実装するこの方法は最良の選択ではありません。

遅延シングルトン メソッド (シングル スレッド書き込み)

package index;
public class Superman {
    //空的构造器
    private Superman(){}

    //实例化对象;只声明 不使用new进行实例化
    private static Superman supermanInstance = null;

    //获取实例化对象的静态函数getSupermanInstance()
    public static Superman getSupermanInstance(){
        if(supermanInstance==null){ //如果为null的情况再进行实例化
            supermanInstance = new Superman();
        }
        return  supermanInstance;
    }
}
ログイン後にコピー

オブジェクトをインスタンス化せずに宣言し、プログラムでインスタンス化する必要があるときに静的ファクトリを呼び出します。 getSupermanInstance()メソッドでは、宣言されたオブジェクトをメソッド内で判定し、nullであればインスタンス化するこの書き込みメソッドは遅延読み込みの効果は得られますが、スレッドセーフではありませんマルチで2つのスレッドがある場合-threading 同時に、静的ファクトリ メソッド getSupermanInstance() を呼び出すと、このクラスのインスタンスが繰り返し作成され、シングルトンの一意性が失われる可能性があります;

推奨チュートリアル: Java チュートリアル

以上がJavaシングルトンパターンとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート