[大話設計模式] 重點筆記:享元模式 (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