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 種設計模式後,自己紀錄的心得。
沒有留言:
張貼留言