2012年8月12日 星期日

Java單例模式(可以減少Andoroid記憶體使用量)

如果有個類別常常使用,那要使用時都必須再new出一個類別,但如果一龐大起來,也許會造成資源不必要的浪費,或許善用static是一個方法,如下:
 
public class Singleton {
 //3.建立一個靜態的類別,直接在這邊建立只會一次。
 private static Singleton instance=new Singleton();
 
 //1.私有化建構方法,這樣就不能new出本類別。
 private Singleton(){
  
 }
 
 //2.定義一個方法堤供用戶端產生好的實例
 public static Singleton getInstance(){
  
  return instance;
  
 }
 public int getCount(int x,int y){

  return x+y;
  
 }
}
public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Singleton aa=Singleton.getInstance();
  System.out.println(aa.toString());

  Singleton bb=Singleton.getInstance();
  System.out.println(bb.toString());
  
  
  System.out.println(aa.getCount(5, 5));
  

 }

}
這樣一來,你會發現System.out.println(aa.toString())跟bb時,他們的記憶體位置是一樣的,這樣能夠有效減少記憶體使用量。 

後續還有一堆很深的意義可以去思考,例如假設有個需求,假設某些資源取得頻繁時,我們可以去定義一個靜態的Map當作資料快取,要取得資料時:
(1)檢查map記憶體位置中是否有資料,如果有直接使用map記憶體裡面得資料值。
(2)如果記憶體位置中沒有值,我們可以從服務器或sqlite去取得資料,取得完後再存入map記憶體中以便下次使用。
這讓我想到在Android上使用google map時,一移動地圖就要從服務器撈取大量座標要標註在地圖上的時候,是不是也能夠使用此邏輯去增加再次顯示的速度?


 看完王者歸來-品味 Java 的 21 種設計模式後,自己紀錄的心得。

沒有留言:

張貼留言

星期、月份英文縮寫

中文 英文 3字母 縮寫 3字母 縮寫 2字母 縮寫 2字母 縮寫 1字母 縮寫 1字母 縮寫 其他 縮寫 星期日 Sunday SUN Sun SU Su S S 星期一 Monday MON Mon MO Mo M M 星期二 Tuesday TUE Tue TU ...