Javaはシングルトンデザインパターン作成タイプを実装します

作成タイプ

1.シングルトンデザインパターン
2.ファクトリーデザインパターン
3.ビルダーデザインパターン
4.プロトタイプデザインパターン

構造タイプ

5.エージェンシーデザインパターン
6、ブリッジングデザインパターン
7、デコレーションデザインパターン
8、アダプターデザインパターン
9、アピアランスデザインパターン
10、フライウェイトデザインパターン
11、コンビネーションデザインパターン

行動

12.テンプレートデザインモード

前書き

シングルトンデザインパターンは非常に簡単に解決できます。クラスは1つのオブジェクト(またはインスタンス)のみを作成でき、このクラスはシングルトンクラスです。このデザインパターンは、シングルトンデザインパターン、または略してシングルトンパターンと呼ばれます。

シングルトンを実装するときに考慮すべき一般的な条件:

1.コンストラクターはprivateで装飾され、アクセス権限はnewによるインスタンス(オブジェクト)の外部作成を回避するために使用されます;
2。オブジェクトを作成するときのスレッドの安全性を考慮します;
3。遅延ロードをサポートするかどうかを検討します;
4。getInstance()のパフォーマンスが高いかどうかを検討します(ロックするかどうか)。

実現する方法

シングルトンモード:空腹の男、怠惰な男、二重検出、静的内部クラス、列挙;

1.空腹の中国人

public class Setting {
    private static final Setting mSetting= new Setting();

    private Setting() {
    }

    public static Setting getInstance() {
        return mSetting;
    }
}

短所:クラスがロードされると、mSettingの静的インスタンスが作成および初期化されます。レイジーロードはサポートされません(必要に応じてシングルトンオブジェクトを作成します)

利点:mSettingインスタンスの作成プロセスはスレッドセーフです(クラスのロード中に、静的mSettingインスタンスはすでに初期化されているため、mSettingインスタンスの作成はスレッドセーフです)
2、遅延

public class Setting {
    private static Setting mSetting;

    private Setting() {
    }

    public static synchronized Setting getInstance() {
        if (mSetting == null) {
            mSetting = new Setting();
        }
        return mSetting;
    }
}

短所:getInstance()はロックを追加します。頻繁に呼び出されると、効率が非常に低くなり(毎回ロックして解放する)、同時実行性が非常に低くなり、1になります。

利点:読み込みを遅らせることができます。

3.二重検出

public class Setting {
    private static Setting mSetting;

    private Setting() {
    }

    public static  Setting getInstance() {
        if (mSetting == null) {
            synchronized (Setting.class) {
                if (mSetting == null) {
                    mSetting = new Setting();
                }
            }
        }
        return mSetting;
    }
}

利点:遅延読み込みと高い同時実行性の両方がサポートされます

4.静的内部クラス

public class Setting {

    private Setting() {
    }

    private static class SettingHolder{
        private static final Setting mSetting = new Setting();
    }


    public static Setting getInstance() {
        return SettingHolder.mSetting;
    }
}

利点:スレッドの安全性を確保しながら、レイジーロードも実行されます。Settingクラスがロードされると、静的内部クラスSettingHolderは作成されず、getInstance()が呼び出されたときにのみロードされます。mSettingの一意性、作成プロセスのスレッドの安全性パフォーマンスはJVMによって保証されています。

5.列挙

public enum  Setting{
    INSTANCE
}

概要:上記の5つの実装はすべてスレッドセーフです。

おすすめ

転載: blog.csdn.net/ezconn/article/details/106507491