通過緩存實現多例模式

下面的實例是通過Map泛型來緩存實現三例

本文只是展示設計模式,對於實例的調度問題不做敘述。

簡單的循環返回三例模式的實現‘

[java] view plain copy
  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3.   
  4.   
  5. /** 
  6.  * 簡單演示如何擴展單例模式,控制實例個數爲三 
  7.  * @author Administrator 
  8.  * 
  9.  */  
  10. public class OneExtend {  
  11.     /** 
  12.      * 定義一個缺省的key值的前綴 
  13.      */  
  14.     private final static String DEFAULT_PREKEY = "Cache";  
  15.     /** 
  16.      * 緩存實例的容器 
  17.      */  
  18.     private static Map<String,Object> map = new HashMap<String,Object>();  
  19.     /** 
  20.      * 用來記錄當前使用第幾個實例 
  21.      */  
  22.     private static int num =1;  
  23.     /** 
  24.      * 定義控制實例的最大數目 
  25.      */  
  26.     private final static int NUM_MAX =  3;  
  27.     /** 
  28.      * 構造方法私有化 
  29.      */  
  30.     private OneExtend(){  
  31.   
  32.     }  
  33.     //獲得實例OneExtend對象  
  34.     public static OneExtend getInstance(){  
  35.         String key = DEFAULT_PREKEY+num;  
  36.         OneExtend instance = (OneExtend) map.get(key);  
  37.         if(instance==null){  
  38.             instance = new OneExtend();  
  39.             map.put(key, instance);  
  40.         }  
  41.         num++;  
  42.         if(num>NUM_MAX){  
  43.             num = 1;  
  44.         }  
  45.         return instance;  
  46.     }  
  47.     /** 
  48.      * 主方法測試 
  49.      * @param args 
  50.      */  
  51.     public static void main(String[] args) {  
  52.         System.out.println(OneExtend.getInstance());  
  53.         System.out.println(OneExtend.getInstance());  
  54.         System.out.println(OneExtend.getInstance());  
  55.         System.out.println(OneExtend.getInstance());  
  56.         System.out.println(OneExtend.getInstance());  
  57.         System.out.println(OneExtend.getInstance());  
  58.     }  
  59. }  

運行結果:

[java] view plain copy
  1. singleton.OneExtend@7852e922  
  2. singleton.OneExtend@70dea4e  
  3. singleton.OneExtend@33909752  
  4. singleton.OneExtend@7852e922  
  5. singleton.OneExtend@70dea4e  
  6. singleton.OneExtend@33909752  

注意:這種設計模式同樣是線程不安全的,對於如何處理,詳細請參看下文

https://blog.csdn.net/qq_31589695/article/details/79939805

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章