- 概述
- UML類圖
- 代碼栗子
- 總結(jié)
-
概述
概念 享元模式通過共享,用來盡可能減少內(nèi)存使用量浅乔,運用共享技術(shù)有效地支持大量細粒度的對象
-
作用:減少創(chuàng)建對象的數(shù)量倔喂,以減少內(nèi)存占用和提高性能
-
UML類圖
-
代碼栗子
-
享元模式中有三種角色
- 抽象享元角色
- 具體享元角色
- 享元工廠角色
-
具體享元角色
public class ExamSite { private String id; /** * 道路名稱 */ private String name; /** * 路況 */ private String road; }
-
抽象享元角色
public class SitePool extends ExamSite{ private String key ; public SitePool(String key) { this.key = key; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } }
-
享元工廠角色
public class SiteFactory { /** * 定義池對象 */ private static Map<String, ExamSite> pool = new HashMap<>(); /** * 享元工廠 * * @param key 值 * @return */ public static ExamSite getExamSite(String key) { //設(shè)置返回的對象 ExamSite examSite; if (pool.containsKey(key)) { System.out.println(key + "----從池子中取得"); examSite = pool.get(key); } else { System.out.println(key + "----建立對象,并放入到池子中"); examSite = new ExamSite(); pool.put(key, examSite); } return examSite; } }
-
-
總結(jié)
-
場景
- 系統(tǒng)中存在大量類似的對象靖苇。
- 細顆粒的對象都具備較接近的外部狀態(tài)席噩,而且內(nèi)部狀態(tài)與環(huán)境無關(guān)
- 緩沖池的場景
-
栗子
JDK中 String的設(shè)計
-
參考資料
書籍《設(shè)計模式之禪》