モノトーンモード


モノトーンパターンとは?

  • アプリケーションが起動すると、クラスには最初にメモリが1回しか割り当てられず、そのメモリにインスタンスが作成されて使用されます.
  • すなわち、
  • インスタンスが必要な場合、同じインスタンスは作成されず、既存のインスタンスが利用される.
  • ジェネレータが複数回呼び出されても、実際のオブジェクトは1つであり、最初に作成されたオブジェクトを返し続けます.java에서는 생성자를 private으로 선언해 다른 곳에서 생성하지 못하도록 만들고, getInstance() 메소드를 통해 받아서 사용하도록 구현한다
  • は、複数の汎用オブジェクトを作成する必要がある場合に使用される.
  • 長所

  • オブジェクトを1回生成して返すだけなので、メモリ領域を1回割り当てるだけです.
    ->メモリの無駄を防ぐことができます.
  • モノトーンのインスタンスは「グローバル」であるため、他のクラスのインスタンスはデータを共有することができる.
  • 短所

  • モノトーンインスタンスは、1人で多くの作業や共有を行うと、他のクラスとの結合度が向上します.
    ->メンテナンスが困難で、テストがうまくいかない.
  • マルチスレッド環境で同期処理を行わない場合、2つのインスタンスが生成されます.
  • によると、モノトーンが必要な場合でなければ避けたほうがいいという.
    (上手に使えば大丈夫!)
  • JavaとSpringのモノトーンパターン


    Javaでモノトーンモードを実現

    public class JavaSingleton { 
      
      private JavaSingleton()
      
      private static class LazyHolder  { 
            private static final JavaSingleton instance = new JavaSingleton(); 
      } 
      
      public static JavaSingleton getInstance()  { 
            return LazyHolder.instance; 
      } 
    } 
  • は最も一般的に使用されている単トン実現法である.これは、Threadのセキュリティとパフォーマンスの面で効率的であるためです.
  • の静的キーワードとして宣言されたオブジェクトにはメモリが1回しか割り当てられず、finalとして宣言された場合は上書きできません.
  • getInstance()は、初期インスタンスを生成するLazyHolderクラスのインスタンスを呼び出します.
  • から呼び出されるたびに、インスタンスが返されます.
  • Springでのモノトーン配列の実装

  • Springではスプリング容器によって実現される.
  • コンテナでクラスに@Beanが定義されている場合、コンテナはクラスのインスタンスのみを作成します.
  • 以降、beanが呼び出されるたびに生成された共有インスタンスが返される.
  • bean管理ボディであるspringコンテナは、任意の呼び出しで単一の共有インスタンスを返し、スレッドの安全を自動的に保証することができる.
  • 差異

  • Javaモノトーンモードは開発者によって実現され、スプリングモノトーンモードはスプリングコンテナによって実現される.
  • ジャワ単音モードのscopeはコードのすべてであり、スプリング単音モードのscopeはこの容器内部である.
  • Javaモノトーンモードは開発者の論理に基づいてスレッドの安全を保証したり、スレッドの安全を保証したりすることができます.
    スプリングモノトーンモードは、自動的にThreadの安全を保証します.