2014-12-09 44 views
-2

任何人都可以解釋如何做享元模式工作的下面的代碼:享元模式

public class FlyweightFactory { 
    Hashtable hash = new Hashtable(); 
    public BallFlyweight getFlyweight(int r, Color col, Container c, AStrategy a) { 
     BallFlyweight tempFlyweight = new BallFlyweight(r,col,c,a), 
     hashFlyweight = ((BallFlyweight)hash.get(tempFlyweight)); 
     if(hashFlyweight != null) 
      return hashFlyweight; 
     else { 
      hash.put(tempFlyweight,tempFlyweight); 
      return tempFlyweight; 
     } 
    } 
} 

感謝。

+2

請採取正確格式化你的問題的時間。 – dcastro 2014-12-09 12:43:44

回答

1

基本上什麼代碼確實是這樣的:

當它被稱爲它會創建一個臨時BallFlyweight具有給定參數。

然後,它在散列表中查找是否存在與此臨時實例相同的實例(具有相同的散列碼)。

如果確實如此,它會從哈希表返回實例,並允許臨時實例超出範圍並進行垃圾收集。

如果沒有,那麼它會將臨時的一個添加到散列表(所以下次請求相同的實例時,它將被找到並返回)並返回它。

這將確保使用此函數的任何人在傳遞相同值時總是獲得相同的實例(假設用於確定哈希碼的函數正常工作,並且代碼不會被多個線程同時訪問)

0

享元使用共享如此大量的對象可以有效地擁有相同的數據或功能。輕量級作爲數據如何在內存中保存的標準化。在大多數情況下,通過大量對象共享的組件是不可變的。

我認爲上面的代碼是一個真正的mutiton(https://en.wikipedia.org/wiki/Multiton_pattern