如果程式中需要建立大量重複的物件時,可以考慮使用亨元模式。亨元模式的目的之一就是復用物件,節約記憶體。
真實專案中使用亨元模式,還要考慮其他因素,比如執行緒安全、物件汙染等問題;如果乙個程式只負責物件的建立,而不涉及物件的使用,則不用顧慮太多,只要有適用亨元模式的場景,就可以考慮這種模式。
jdk中integer類的valueof方法有應用到此種模式:
public static integer valueof(int i)
如果i的值在-127到128範圍內,則從快取中取值,否則重新建立乙個integer物件。
tips:
integercache是integer的乙個內部類:
private static class integercache catch( numberformatexception nfe)
}high = h;
cache = new integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new integer(j++);
// range [-128, 127] must be interned (jls7 5.1.7)
assert integercache.high >= 127;
}private integercache() {}
}
成員變數cache用來快取-127到128內的值:
cache = new integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new integer(j++);
設計模式 亨元模式
享元模式也被稱為 蠅量模式 屬於結構型設計模式的一種,該模式的主要作用就是通過運用共享技術促使大量細粒度的物件可以被復用。該模式常用於系統底層開發,解決系統效能問題。像我們常用的資料庫連線池,字串常量池等 都是使用享元模式來完成的。池 中儲存了我們建立好的物件,當需要時進行判斷,如果 池 中有就可以...
設計模式 結構型模式亨元模式
介面shape定義亨元被外部呼叫的方法 具體的亨元實現circle實現介面shape並實現自定義方法 工廠類shapefactory 在呼叫getcircle 的時候從維護的hashmap circlemap 中根據主鍵獲取唯一身份標識的處理類,或者直接取出乙個使用,使用完成之後歸還處理物件 案例1...
結構型模式 亨元模式
亨元模式 使用共享物件可以有效地支援大量細粒度的物件 亨元模式以共享的方式高效地支援大量的細粒度物件。亨元物件能做到共享的關鍵是區分內部狀態 internal state 和外部狀態 external state 內部狀態是儲存在亨元物件內部的 可以共享的資訊,並且不會隨環境改變而變化。外部狀態是歲...