ホームページ > Java > &#&チュートリアル > Java創作デザインパターンのシングルトンパターンを実装する方法

Java創作デザインパターンのシングルトンパターンを実装する方法

PHPz
リリース: 2023-05-15 10:49:05
転載
815 人が閲覧しました

はじめに

シングルトン パターンは創造的なデザイン パターンです。その主な機能は次のとおりです:

  • インスタンスが 1 つだけ: シングルトン パターンにより、インスタンスが 1 つだけ存在することが保証されます。インスタンス オブジェクトはシステム内に存在し、オブジェクトへのすべてのアクセスは同じオブジェクトへの参照です

  • グローバル アクセス: シングルトン モードではインスタンス オブジェクトにグローバルにアクセスできるため、競合と競合

  • 遅延初期化: シングルトン モードでは通常、遅延初期化テクノロジが使用され、必要な場合にのみシングルトン オブジェクトが作成されるため、不必要なリソースの無駄やパフォーマンスの損失が回避されます。シングルトン オブジェクトの正確性と信頼性を確保します

  • スレッド セーフティ: シングルトン モードでは、マルチスレッドで取得されるインスタンス オブジェクトが同じであることを確認し、マルチスレッドを回避するために、スレッド セーフティの問題を考慮する必要があります。

#利点

  • オブジェクトの管理と保守を容易にするグローバルに一意のインスタンスを提供します

  • # オブジェクトの作成と破棄を減らし、システムのパフォーマンスを向上させます。
  • # 複数のインスタンス間の競合と競合を回避し、オブジェクトの状態の一貫性と安定性を確保します。 プロパティ
  • システム内の特定のクラスのインスタンス数を制御して、システム リソースの無駄や乱用を回避できます
  • スレッドの安全性とシリアル化、リフレクション、その他の機能を促進しますオブジェクトの信頼性とセキュリティを向上させる
  • 欠点

シングルトン モードではコードの複雑さが増し、システムの難易度が低下します。メンテナンスとコードのテスト。
  • シングルトン モードでは、シングルトン オブジェクトのライフ サイクルが長すぎる可能性があり、その結果、オブジェクトが時間内にリリースされず、その結果、 system
  • シングルトン モードが悪用されると、システム内にシングルトン オブジェクトが多すぎて、システム リソースの占有が増大し、管理が困難になる可能性があります
  • シングルトン モードは、特にマルチスレッド環境では破壊される可能性があります。シングルトン オブジェクトの正確性と信頼性を確保するには特別な実装メソッドが必要です
  • 実装
热汉式

これは最も単純なシングルトン実装メソッドです。このメソッドでは、クラスのロード時にシングルトン インスタンスが作成されるため、マルチスレッド環境での安全性が保証されます。

package com.fanqiechaodan.singleton.singleton1;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    private Singleton(){
        // 私有构造函数
    }
    public static Singleton getInstance(){
        return INSTANCE;
    }
}
ログイン後にコピー

Lazy Man Style

このメソッドでは、初めて使用するときにシングルトン インスタンスが作成されます。マルチスレッド環境では、二重ロック機構を使用することで、インスタンスが作成されます。

package com.fanqiechaodan.singleton.singleton2;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {
        // 私有构造函数
    }
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
ログイン後にコピー

静的内部クラス

このメソッドは、Java のクラス ロード メカニズムを利用します。Singleton インスタンスは、SingletonHolder クラスに初めてアクセスしたときにのみロードされます。このメソッドスレッドの安全性を確保し、遅延読み込みを実装できます

package com.fanqiechaodan.singleton.singleton3;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton(){
        // 私有构造函数
    }
    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }
}
ログイン後にコピー

Enumeration

列挙型を使用すると、スレッド セーフなシングルトン モードを非常に簡単に実装できます。列挙型は定義時に作成されるため、スレッドになります。 -safe、インスタンスは 1 つだけです。

package com.fanqiechaodan.singleton.singleton4;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton() {
        // 私有构造函数
    }
    static enum SingletonEnum {
        /**
         * 枚举实例
         */
        INSTANCE;
        private Singleton singleton;
        /**
         * 私有构造函数,确保只有一个实例
         */
        private SingletonEnum() {
            singleton = new Singleton();
        }
        private Singleton getSingleton() {
            return singleton;
        }
    }
    /**
     * 对外暴露一个获取Singleton对象的静态方法
     *
     * @return
     */
    public static Singleton getInstance() {
        return SingletonEnum.INSTANCE.getSingleton();
    }
}
ログイン後にコピー

Hungry スタイルの実装はシンプルですが、遅延読み込みはサポートされていません。アプリケーションの開始時に、インスタンス オブジェクトが作成されます
  • 遅延スタイルは遅延読み込みをサポートしますが、二重チェック ロック メカニズムの使用が必要で、コードは比較的複雑です
  • 静的内部クラスは次のとおりです。シンプルでスレッドセーフな実装メソッドであり、遅延読み込みもサポートしています
  • 列挙型は最も単純なシングルトン実装メソッドであり、最も安全です。スレッド セーフの問題を考慮する必要がなく、また、
  • 一般に、列挙シングルトン モードは、ほとんどのシングルトン モードのニーズを満たすことができる、シンプルで効率的かつスレッドセーフなシングルトン実装方法です。シングルトン モードを実装するには、列挙シングルトン モードを使用することをお勧めします。

以上がJava創作デザインパターンのシングルトンパターンを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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