java設計模式——多例模式


★ 緩存在單例中的使用    緩存在編程中使用很頻繁,有着非常重要的作用,它能夠幫助程序實現以空間換取時間,通

常被設計成整個應用程序所共享的一個空間,現要求實現一個用緩存存放單例對象的類。

說明:該緩存中可以存放多個該類對象,每個對象以一個key值標識,key值相同時所訪問的是同一個單例對象。

代碼如下:

 

  1.  
    //緩存
  2.  
    import java.util.HashMap;
  3.  
    import java.util.Map;
  4.  
    //本例中,因為沒有定義最大容量,所以"理論上"是可以無限制添加的,直至系統崩潰
  5.  
    public class Student {
  6.  
    //定義用於緩存的容器
  7.  
    private static Map map = new HashMap();
  8.  
    /*本例中,Student類的構造方法不需要私有化,
  9.  
    * 因為采用單例模式的是map
  10.  
    * 而student是加到map中的
  11.  
    */
  12.  
    public static Student getInstance(String key){
  13.  
    //到緩存中查找key對應的對象
  14.  
    Student stu = map.get(key);
  15.  
    if(stu==null){//若為空,則new一個並加到map中
  16.  
    stu = new Student();
  17.  
    map.put(key, stu);
  18.  
    }
  19.  
    return stu;
  20.  
    }
  21.  
    }

 

★ 單例變形——多例模式   把上面緩存的單例實現,做成一個能夠控制對象個數的共享空間,供整個應用程序使用。在

緩存中維護指定個數的對象,每個對象的key值由該類內部指定,有外部請求時直接返回其中一個對象出去。

說明:相當於維護一個指定數量的對象池,當請求個數超過控制的總數時,開始循環重復使用 。

代碼如下:

 

  1.  
    //單例的變種--多例
  2.  
    import java.util.HashMap;
  3.  
    import java.util.Map;
  4.  
    //本例中,count的值決定了緩存區的最大容量
  5.  
    public class Student_2 {
  6.  
    private static Map map = new HashMap();//將緩存當作單例
  7.  
    private static int count=4;//緩存區的實例總數(該整數可以采用用戶設置或讀取配置文件的方式更改)
  8.  
    private static int num=1;//當前實例(對象)的序號--用num來當作內部維護的key
  9.  
     
  10.  
    public static Student_2 getInstance(){
  11.  
    Student_2 stu = map.get(num);
  12.  
    if(stu==null){
  13.  
    //若stu為空,則new一個出來並加到map中
  14.  
    stu = new Student_2();
  15.  
    map.put(num, stu);
  16.  
    }
  17.  
    num++; //序號不斷變化,循環利用緩存區
  18.  
    if(num>count){
  19.  
    num= 1;//重置當前實例的序號
  20.  
    }
  21.  
    return stu;
  22.  
    }
  23.  
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM