天天看點

設計模式學習筆記——享元模式

享元模式英文叫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;
              }
       }
}      

繼續閱讀