第95章(1 / 1)

大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;

(本章完)