享元模式英文叫Flyweight Pattern。Flyweight,應該是一個來自于拳擊術語,最輕量級,也叫蠅量級。次奧,我看《大話設計模式》這本書的時候,一直錯看成 亨元模式,搞不懂為什麼叫這個名字。現在看清楚了,是享元,共享的享,就比較好了解了。
享元模式,就是共享、重用一些現成的對象,免得構造太多,消耗資源巨大。是以,享元模式是 單例模式 + 簡單工廠模式。
在享元模式中引入了享元工廠類,享元工廠類的作用在于提供一個用于存儲享元對象的享元池,當使用者需要對象時,首先從享元池中擷取,如果享元池中不存在,則建立一個新的享元對象傳回給使用者,并在享元池中儲存該新增對象。
class FlyweightFactory {
//定義一個HashMap用于存儲享元對象,實作享元池
private HashMap flyweights = newHashMap();
public Flyweight getFlyweight(String key){
//如果對象存在,則直接從享元池擷取
if(flyweights.containsKey(key)){
return(Flyweight)flyweights.get(key);
}
//如果對象不存在,先建立一個新的對象添加到享元池中,然後傳回
else {
Flyweight fw = newConcreteFlyweight();
flyweights.put(key,fw);
return fw;
}
}
}