一般的な設計パターンのシングルトンデザインパターン6種類

作成された時間に応じてデザインシングルトンデザインパターン空腹(比較的緊急使用)中国風、怠惰(作成するために必要な場合にのみ、怠け者)中国風

飢え式の一般的な形式

  1. 直接インスタンス化(視覚的に比較プロファイル)
  2. 列挙された(最もシンプル)
  3. コードの飢え式静的ブロック(複合体の例)

怠惰なスタイルの一般的な形式

  1. スレッドセーフ(シングルスレッドに適し)
  2. スレッドセーフ(に適したマルチスレッド)
  3. (マルチスレッドのための)静的内部クラス

 ①飢え式は直接サンプルコードは、インスタンス化

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

②列挙型

public enum  Singleton2 {
    INSTANCE
}

③静的コードブロック

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

    }
}

 

(シングルスレッドプログラム用)④怠惰なスタイルのスレッドセーフ

public class Singleton4 {
    public static Singleton4 instance;

    private Singleton4(){

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

④上記方法のマルチスレッディングは、セキュリティスレッドを引き起こすことが、複数のスレッドがオブジェクトの複数の例では、結果として、新しいインスタンスを実行した場合、その後に入力されていてもよいです。解決策は、新しいインスタンス化を行っている場合のみ、1スレッドが入ることができる性を保証をロックすることです

⑤スレッドセーフ

public class Singleton5 {
    public static Singleton5 instance;
    private Singleton5() { }
    public static Singleton5 getInstance() {
        if (instance == null) {//提高效率加的判断
            synchronized (Singleton5.class) {
                if (instance == null) {
                    instance = new Singleton5();
                }
            }
        }
        return instance;
    }
}

⑥静的な内部クラス

静的な内部クラスの特徴

  1. オブジェクトのみ内部クラスローディング及び初期化のINSTANCEインスタンスを作成します
  2. 静的な内部クラスが自動的にロードされ、外部クラスで初期化されることはありません、JDKがロードされ一人で行くと初期化されます
public class Singleton6 {
    private Singleton6(){ }
    private static class InnerClass{
        private static final Singleton6 INSTANCE=new Singleton6();
    }
    public static Singleton6 getInstance(){
        return InnerClass.INSTANCE;
    }
}

 

 

公開された242元の記事 ウォン称賛13 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_41813208/article/details/103982098
おすすめ