スプリングお気に入りのデザインモード(2)


4.一輪モード


シングルループモードは、一例を作成するために使用されるモードです.接続プール、スレッドプール、デバイス設定オブジェクトなどの場合、複数のインスタンスを作成すると不要なリソースが消費され、プログラムに予期せぬ結果が生じる可能性があります.単一ループモードでは、インスタンスが1つだけ作成され、再使用されます.
シングルループモードを適用すると、2つのオブジェクトが存在しないことを意味します.これを実現するには、オブジェクトを作成するnewをコンストレイントし、作成した単一のオブジェクトを返す方法が必要です.したがって,必要な要因を考慮すると,以下の3つの要因を考慮しなければならない.
  • newが実行できないように、ジェネレータにプライベートアクセス制御プログラムを指定します.
  • の一意の単一オブジェクトを返す静的方法が必要です.
  • 固有の単一オブジェクトを参照するには、静的参照変数が必要です.
  • サンプルコードは次のとおりです.
    Singleton.java
    package singletonPattern;
    
    public class Singleton {
        static Singleton singletonObject;  // 정적 참조 변수
        
        private Singleton() {};  // private 생성자
        
        // 객체 반환 정적 메서드
        public static Singleton getInstance() {
            if (singletonObject = null) {
                singletonObject = new Singleton();
            }
            
            return singletonObejct;
        }
     }
    getInstance()静的メソッドでは、静的参照変数にオブジェクトが指定されていない場合にのみnewによってオブジェクトが作成され、静的参照変数に割り当てられます.次に、静的参照変数に割り当てられた一意のオブジェクトの参照を返します.テストコードは次のとおりです.
    Client.java
    package singletonPattern;
    
    public Class Client {
        public static void main(String[] args) {
            // private 생성자이므로 new를 통해 인스턴스를 생성할 수 없다.
            // Singleton s = new Singleton();
            
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            Singleton s3 = Singleton.getInstance();
            
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
            
            s1 = null;
            s2 = null;
            s3 = null;
        }
     }        
    s1 = null; 実行前のTメモリスナップショットを表示します.

    4つの参照変数(singletonObject、s 1、s 2、s 3)が単一のオブジェクトを参照していることがわかります.これが単輪モードの力です.単一のオブジェクトの場合、最終的には共有オブジェクトとして使用されるため、属性を持たないのが慣例です.個々のオブジェクトに属性がある場合、ある参照変数によって変更された個々のオブジェクトの属性が別の参照変数に影響を与えるためです.読み取り専用のプロパティがあるだけで問題はありません.また、個々のオブジェクトから別の個々のオブジェクトへの参照もプロパティとして問題ありません.
    上記のコードを実行すると、次の結果が得られます.
    SingletonPattern.Singleton@263c8db9
    SingletonPattern.Singleton@263c8db9
    SingletonPattern.Singleton@263c8db9
    オブジェクト参照変数自体がシステムです.out.参照オブジェクトをprintln出力で呼び出すtoString()メソッド.toString()メソッドを上書きしない場合は、オブジェクトの一意の値hashCode()が返され、呼び出すたびに同じ値が出力されることがわかります.これは、3つの参照変数s 1、s 2、s 3が同じオブジェクトを参照することを意味する.
    覚えた単輪パターンの特徴は以下の通りです.
  • プライベートジェネレータを所有しています.
  • 単一オブジェクト参照変数には静的属性があります.
  • getInstance()静的メソッドは、
  • の単一オブジェクトが変数を参照して参照する単一オブジェクトを返します.
  • 単一オブジェクトが書き込み可能な属性を持たないのが慣例です.
  • 単輪モードを1つの文に整理します.
    「クラスのインスタンス、すなわちオブジェクトを作成し、そのモードを使用する」
    リファレンス
  • Javaオブジェクト向けSpringの入門原理と
  • を理解する