標籤:
package 建立型_單例模式_登記式;import java.util.HashMap;import java.util.Map;/** * 登記式單例實際上維護的是一組單例類的執行個體,將這些執行個體儲存到一個Map(登記簿) * 中,對於已經登記過的單例,則從工廠直接返回,對於沒有登記的,則先登記,而後 * 返回 * @author pp * */public class RegSingleton { /** * 登記簿,用來存放所有登記的執行個體 */ private static Map<String, RegSingleton> map = new HashMap<String, RegSingleton>(); //在類載入時添加一個執行個體到登記簿 static{ RegSingleton singleton = new RegSingleton(); map.put(singleton.getClass().getName(), singleton);//運用了反射 } /** * 受保護的預設構造方法 */ protected RegSingleton() { } /** * 靜態Factory 方法,返回指定登錄物件的唯一執行個體 * 對於已經登記的直接取出返回,對於還未登記的先登記,然後取出返回 * */ public static RegSingleton getInstance(String name){ if(name==null){ name="RegSingleton"; } if(map.get(name)==null){ try { map.put(name, (RegSingleton) Class.forName(name).newInstance()); } catch (Exception e) { e.printStackTrace(); } } return map.get(name); } /** * 一個示意性的商業方法 */ public String about(){ return "Hello,I am RegSingleton"; }}
Java設計模式之單例模式之登記式單例