享元模式
Posted camcay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了享元模式相关的知识,希望对你有一定的参考价值。
让某个类的一个示例能用来提供多个“虚拟实例”
类图
(来源:wiki)
示例
public class Tree { private String color; public Tree(String color){ this.color =color; } @Override public String toString() { return color+" Tree"; } } public class TreeManager { private static final HashMap<String,Tree> TREE_MAP = new HashMap<>(); public static Tree getTree(String color){ Tree tree = (Tree)TREE_MAP.get(color); if(tree==null){ tree = new Tree(color); TREE_MAP.put(color,tree); } System.out.println(tree); return tree; } public static int countTrees(){ return TREE_MAP.size(); } } //测试 public class Client { public static void main(String[] args){ TreeManager.getTree("GREEN"); TreeManager.getTree("GREEN"); TreeManager.getTree("RED"); TreeManager.getTree("GREEN"); TreeManager.getTree("BLUE"); TreeManager.getTree("RED"); TreeManager.getTree("BLUE"); System.out.println("对象个数:"+TreeManager.countTrees()); } }
运行结果
优点
- 减少运行时对象实例个数,节约内存。
缺点
- 单个逻辑实例无法拥有独立而不同的行为。
以上是关于享元模式的主要内容,如果未能解决你的问题,请参考以下文章