Java設計モード-Singleton(Singleton)


単一モード(単一モードとも呼ばれる)は、クラスが1つのインスタンスしか存在しないことを示し、生成用単一モード設計クラスはnewキーワードでは取得できない.単一状態モードは、簡単な一言で要約できます.
構築メソッドはプライベート化され、共有静的メソッドによってクラスのインスタンスが返されます.
最近、プロジェクト開発では、プログラムが使用する各パラメータを個別に取り出してプロファイルを作成し、プログラムがユーザの位置決め要求を受信すると、プロファイルから対応するパラメータとクライアントから要求されたパラメータを読み出して照合し、位置決め要求を異なる位置決めプラットフォームに送信するが、問題が発生し、ファイルを読み取るたびにnewのファイルオブジェクトが必要となる.一方、位置決め要求は毎秒数~数十個あり、頻繁なファイル読み取りによりサーバのパフォーマンスが低下する可能性があります(ファイルを読み取り、ファイルオブジェクトを生成するには、ファイルストリームを開き、読み取り、ファイルストリームを閉じます).場合によっては、シングルステートモードを使用し、プログラムが起動すると一意のファイルオブジェクトを生成します.これにより、ファイルを読み込むたびにファイル物理とI/Oストリームを確立せず、メモリから直接読み取ることができます.
1.単態類(怠け者の単態類)
package com.sunnylocus.singleton;

import java.io.File;

public class Singleton {
	private static Singleton instance;
	private static File configFile;
	private Singleton() { //       
	}
	/**         */
	public File getConfigFile() {
		return configFile;
	}
	/**   Singleton    */
	public static synchronized Singleton getInstance() {//               
		if(instance == null) {
			configFile = new File("src/com/sunnylocus/singleton/locationConfig.xml"); 
			instance = new Singleton();
		}
		
		return instance;
	}
}

 
2.Test
package com.sunnylocus.singleton;

import java.io.File;

public class Main {
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		
		if(s1 == s2) { //    
			System.out.println("s1 s2         ");
		}
		else {
			System.out.println("s1 s2          ");
		}
		
		File f1 = s1.getConfigFile();
		File f2 = s1.getConfigFile();
		if(f1 == f2) {
			System.out.println("         ");
		}
		else {
			System.out.println("           ");
		}
	}
}

 
3.output:
 
s1 s2         
         

 
 
二、餓漢式単態類
public class TestSingleton {
	private static final TestSingleton instance = new TestSingleton();
	
	private TestSingleton() {
	}
	/**       */
	public static TestSingleton getInstance() {
		return instance;
	}
}