モノトーンモードとは?


Javaでのモノトーンモード


SingletonモードはJavaでよく使われています.
シングルトーンモードとは、クラスにメモリが最初に1回しか割り当てられず、メモリにオブジェクトを作成して使用する設計モードです.
すなわち,コンストラクション関数を繰り返し呼び出しても,実際に生成されたオブジェクトは最初に生成されたオブジェクトを返す.
public class SingleTon {
    //Instance
    private static SingleTon singleTon = new SingleTon();

    //private construct
    private SingleTon() {}

    public static SingleTon getSingleTon() {
        return singleTon;
    }
}
上のコードはグローバル変数singletonを宣言しています.
staticを拡大することで、インスタンス化せずに使用できます.
ただしアクセス制限者はプライベートなので直接アクセスできません.
また、ジェネレータもプライベートであり、newでオブジェクトを作成することはできません.
最終的にはgetSingleTon法によりこのインスタンスを得ることができる.

モノトーンモードを使用する理由


前述したように、オブジェクトを1回作成するだけで再利用できるため、メモリの無駄を回避できます.
また、モノトーン生成されたオブジェクトは無条件に1回のみ生成され、グローバル性があり、他のオブジェクトと共有しやすい.

モノトーンモードの問題


モノトーンも前述したようにグローバルであり、他のオブジェクトと共用する場合など、いくつかの場合にのみ有効であり、それ以外にも問題が発生する.
単一色調オブジェクトのキャラクタが単純ではなく複雑なキャラクタであると、その単一色調オブジェクトを使用する他のオブジェクト間の欠陥の程度が増加し、オブジェクト向けの設計原則に反する.(open-closed)
また、このモノトーンオブジェクトを修正すると、モノトーンオブジェクトを使用した場所でサイド歪みの確率が発生し、マルチスレッド環境で同期処理の問題などが発生する.

モノトーンモードを実現


JavaとSpringの違い


JavaとSpringのモノトーンの違いであれば、モノトーンオブジェクトのライフサイクルは異なります.
また、JavaではClass Loaderベースであり、SpringではApplicationContextベースである.
注意:https://elfinlas.github.io/2019/09/23/java-singleton/