需要實現只讓new class執行一次,就只會產生一個類的對象實例。
這個模式是在單個類裏面就可以實現,有2個需要注意的地方,1、類的構造函數必須是私有的,2、提供一個靜態方法用來返回該類唯一的實例。
唯一的實例產生有兩種方式,在聲明該類型的變量時new一個,或者在getInstance方法中進行判斷,如果變量爲空,先生成一個對象賦給該變量,然後返回該變量
實例:
/**
*單例模式實例
*@version 1.0 ,9/13/2007
*/
import java.util.*;
import java.io.*;
/**
*讀取系統參數信息,生成系統控制參數對象
*@author tsimgsong
*/
public class SingletonExample {
/**
*系統屬性列表
*/
Properties prop = new Properties();
private static SingletonExample se = null;
private SingletonExample(){
System.out.println("Initializing...");
try{
FileInputStream fis = new FileInputStream("sysConf.prop");
prop.load(fis);
}catch(Exception e){
}
}
public static SingletonExample getInstance(){
if(se == null ){
se = new SingletonExample();
}
return se;
}
public Object getConf(String key){
return prop.get(key);
}
public void setConf(String key,String value){
prop.put(key,value);
}
}
/**
*客戶端測試程序
*/
class Main
{
public static void main(String[] args){
SingletonExample se = SingletonExample.getInstance();
System.out.println(se.getConf("key1"));
se.setConf("key2","value2");
SingletonExample se2 = SingletonExample.getInstance();
System.out.println(se2.getConf("key2"));
}
}
輸出:
Initailizing…
value1
Value2
小結:
該模式比較簡單,可以結合工廠模式一起使用,工廠產生出來的就是同一個實例。