大B:“我們前麵已經提到,當大量從數據源中讀取字符串,其中肯定有重複的,那麼我們使用Flyweight模式可以提高效率,以唱片CD為例,在一個XML文件中,存放了多個CD的資料。”
每個CD有三個字段:
1、出片日期(year)
2、歌唱者姓名等信息(artist)
3、唱片曲目(title)
其中,歌唱者姓名有可能重複,也就是說,可能有同一個演唱者的多個不同時期不同曲目的CD。我們將‘歌唱者姓名’作為可共享的ConcreteFlyweight。其他兩個字段作為UnsharedConcreteFlyweight。
首先看看數據源XML文件的內容:
《cd》
《/cd》
《cd》
《/cd》
《cd》
《/cd》
……
雖然上麵舉例CD隻有3張,CD可看成是大量重複的小類,因為其中成份隻有三個字段,而且有重複的(歌唱者姓名)。
CD就是類似上麵接口Flyweight:
將“歌唱者姓名”作為可共享的ConcreteFlyweight:
//內部狀態
再看看Flyweightfactory,專門用來製造上麵的可共享的ConcreteFlyweight:Artist
////產生新的。
當你有幾千張甚至更多CD時,Flyweight模式將節省更多空間,共享的flyweight越多,空間節省也就越大。
給個例子,coffee商店
super;
super;
(本章完)