[大話設計模式] 重點筆記:享元模式 (Flyweight)

  • 2854
  • 0
  • 2011-07-24

[大話設計模式] 重點筆記:享元模式 (Flyweight)

[Ch.26]

原文定義:

Use sharing to support large numbers of fine-grained objects efficiently.
 

UML圖:p.393 或參考連結
 

重點筆記:
 

1.適用時機:系統中有大量類別實體,消耗大量的記憶體。但這些類別實體除了幾個參數外,基本上是相同的,那麼就可以考慮透過將這些參數移到類別實體的外面,透過共用來減少實體的數目。
2.內部狀態:不隨環境改變,可共享的部份。儲存於ConcreteFlyweight物件中。
3.外部狀態:隨環境改變無法共享的狀態,由用戶端物件儲存或計算,於Flyweight操作時才經由參數傳入。
4.結論:享元模式雖然能節省大量記憶體的消耗,但需額外記錄/處理所有享元的內外部對應關係,因此這種模式在某種程度上也可以算是一種以時間換空間的做法。
5.應用例:文字編輯器中的文字(內:字元;外:字型);圍棋、跳棋、五子棋中的棋子等(內:顏色;外:位置)

 

參考資料:
 

http://www.dofactory.com/Patterns/PatternFlyweight.aspx
http://www.javaworld.com.tw/confluence/display/designpattern/Flyweight
http://www.cnblogs.com/Terrylee/category/36516.html
http://www.cnblogs.com/Terrylee/archive/2006/03/29/361767.html
http://blog.csdn.net/wanghao72214/article/details/4046182
http://www.cnblogs.com/ywqu/archive/2010/01/21/1653087.html