享元模式
- 概述
- UML类图
- 代码栗子
- 总结
-
概述
-
概念 享元模式通过共享,用来尽可能减少内存使用量,运用共享技术有效地支持大量细粒度的对象
-
作用:减少创建对象的数量,以减少内存占用和提高性能
-
-
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) { //设置返回的对象 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; } }
-
-
总结
-
场景
- 系统中存在大量类似的对象。
- 细颗粒的对象都具备较接近的外部状态,而且内部状态与环境无关
- 缓冲池的场景
-
栗子
JDK中 String的设计
-
参考资料
书籍《设计模式之禅》