下面的實例是通過Map泛型來緩存實現三例
本文只是展示設計模式,對於實例的調度問題不做敘述。
簡單的循環返回三例模式的實現‘
- import java.util.HashMap;
- import java.util.Map;
- /**
- * 簡單演示如何擴展單例模式,控制實例個數爲三
- * @author Administrator
- *
- */
- public class OneExtend {
- /**
- * 定義一個缺省的key值的前綴
- */
- private final static String DEFAULT_PREKEY = "Cache";
- /**
- * 緩存實例的容器
- */
- private static Map<String,Object> map = new HashMap<String,Object>();
- /**
- * 用來記錄當前使用第幾個實例
- */
- private static int num =1;
- /**
- * 定義控制實例的最大數目
- */
- private final static int NUM_MAX = 3;
- /**
- * 構造方法私有化
- */
- private OneExtend(){
- }
- //獲得實例OneExtend對象
- public static OneExtend getInstance(){
- String key = DEFAULT_PREKEY+num;
- OneExtend instance = (OneExtend) map.get(key);
- if(instance==null){
- instance = new OneExtend();
- map.put(key, instance);
- }
- num++;
- if(num>NUM_MAX){
- num = 1;
- }
- return instance;
- }
- /**
- * 主方法測試
- * @param args
- */
- public static void main(String[] args) {
- System.out.println(OneExtend.getInstance());
- System.out.println(OneExtend.getInstance());
- System.out.println(OneExtend.getInstance());
- System.out.println(OneExtend.getInstance());
- System.out.println(OneExtend.getInstance());
- System.out.println(OneExtend.getInstance());
- }
- }
運行結果:
- singleton.OneExtend@7852e922
- singleton.OneExtend@70dea4e
- singleton.OneExtend@33909752
- singleton.OneExtend@7852e922
- singleton.OneExtend@70dea4e
- singleton.OneExtend@33909752
注意:這種設計模式同樣是線程不安全的,對於如何處理,詳細請參看下文