單例模式(Singleton)

單例模式(Singleton)


@@@模式定義:
保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。


@@@練習示例:
讀取配置文件的內容。


@@@示例代碼:
src/tools/AppConfig.java

~~~~~~~~~~~~~~~~~~~~~~~~

package tools;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 
 * 讀取應用配置文件
 */
public class AppConfig {
	/**
	 * 定義一個變量來存儲創建好的類實例,直接在這裏創建類實例,只能創建一次
	 */
	private static AppConfig instance = new AppConfig();
	
	/**
	 * 定義一個方法來爲客戶端提供AppConfig類的實例
	 * @return 一個AppConfig的實例
	 */
	public static AppConfig getInstance() {
		return instance;
	}

    /**
     * 用來存放配置文件中參數A的值
     */
	private String parameterA;
	
    /**
     * 用來存放配置文件中參數B的值
     */
	private String parameterB;

	public String getParameterA() {
		return parameterA;
	}

	public String getParameterB() {
		return parameterB;
	}
	
	/**
	 * 私有化構造方法
	 */
	private AppConfig() {
		//調用讀取配置文件的方法
		readConfig();
	}
	
	/**
	 * 讀取配置文件,把配置文件中的內容讀出來設置到屬性上
	 */
	private void readConfig() {
		Properties  p  = new Properties();
		InputStream in = null;
		
		try {
			in = AppConfig.class.getResourceAsStream("AppConfig.properties");
			p.load(in);
			//把配置文件中的內容讀出來設置到屬性上
			this.parameterA = p.getProperty("paramA");
			this.parameterB = p.getProperty("paramB");
		} catch (IOException e) {
			System.out.println("裝載配置文件出錯了,具體堆棧信息如下:");
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}



src/tools/AppConfig.properties
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
paramA=a
paramB=b


src/user/Client.java
~~~~~~~~~~~~~~~~~~~~
package user;

import tools.AppConfig;

public class Client {
	public static void main(String[] args) {
		//創建讀取應用配置的對象
        AppConfig config = AppConfig.getInstance();
        
        String paramA = config.getParameterA();
        String paramB = config.getParameterB();
        
        System.out.println("paramA=" + paramA + ", paramB=" + paramB);
	}
}

@@@模式的實現:
1. 餓漢式,空間換時間,線程安全。
2. 懶漢式,時間換空間,不加同步則線程不安全。
3. 用枚舉實現。


@@@模式的本質:
控制實例數目,節省系統資源。

發佈了28 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章