シングルステートモード


単一モードではクラスインスタンスの作成が制限されますが、このモードで設計されたクラスは、インスタンスが1つしかないことを保証し、インスタンスにアクセスするグローバルアクセスポイントを提供します.J 2 EEアプリケーションの多くのコンポーネントは、クラスが1つしかないことを保証する必要があります.たとえば、データベース・エンジン・アクセス・ポイントは1つしかありません.
より多くの場合、パフォーマンスを向上させるために、Javaオブジェクトの作成と破棄時のコストを最小限に抑える必要があります.シングルステートモードを使用すると、Javaクラスが複数回インスタンス化され、同じクラスのすべてのインスタンスが同じメモリ領域を共有することを回避できます.単一モードのクラスが複数回インスタンス化されることを防止するために、クラスのコンストラクタをプライベートに設定する必要があります.これにより、静的方法でしかクラスインスタンスが得られないことが保証されます.静的メソッドは、返すたびにインスタンスが同じであることを保証します.これにより、クラスのインスタンスをクラス属性に設定する必要があります.この属性は静的メソッドによってアクセスされる必要があるため、この属性は静的属性に設定する必要があります.
単一モードのコードの例を次に示します.
public class SingletonTest {

	/**
	 * @param args
	 */
//	         。
	int value;
	//                。
	private static SingletonTest instance;
	//      ,         。
	private SingletonTest(){
	System.out.println("       ...,,");
	}
	//              。
	public static SingletonTest getInstance(){
		//       ,            
		if (instance == null)
			//     ,       。
			instance = new SingletonTest();
		//         :     。
		    return instance;
	}
	public int getValue(){
		return value;
	}
	public void setValue(int values){
		this.value = values;
		}
	public void print(){
		System.out.println(value);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SingletonTest tl = SingletonTest .getInstance();
		SingletonTest t2 = SingletonTest .getInstance();
		t2.setValue(9);
		t2.print();
		System.out.println(tl == t2);
		tl.print();


	}

結果:
コンストラクタを実行中...、
   9
   true
   9
上にif(instance==null)を注釈すると.結果は次のとおりです.
コンストラクタを実行中...、
コンストラクタを実行中...、
9
false
0
プログラムの最後の印刷結果から、クラスの2つのインスタンスは完全に同じであることがわかります.これは、単一モードクラスのすべてのインスタンスが同じ共有インスタンスであることを証明します.プログラムではクラスの2つのインスタンスが得られたが,実際には1回のコンストラクタのみが実行される.なぜなら,単一状態モードのクラスでは,インスタンス作成要求が何回あっても1回のコンストラクタのみが実行されるからである.