1. 定义
运用共享技术有效地支持大量细粒度的对象。
2. 实现
2.1 Tree、TreeNode、TreeFactory
class Tree { //设置final保证线程安全 private final String name; private final String data; public Tree(String name, String data) { this.name = name; this.data = data; } public String getName() { return name; } public String getData() { return data; }}
class TreeNode { private int x; private int y; private Tree tree; public TreeNode(int x, int y, Tree tree) { this.x = x; this.y = y; this.tree = tree; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Tree getTree() { return tree; } public void setTree(Tree tree) { this.tree = tree; }}
class TreeFactory { //ConcurrentHashMap保证线程安全 private static Map<String, Tree> map = new ConcurrentHashMap<>(); public static Tree getTree(String name, String data) { if (map.containsKey(name)) { return map.get(name); } Tree tree = new Tree(name, data); map.put(name, tree); return tree; }}
2.2 使用
public static void main(String[] args) { //TreeFactory.getTree获取的到数据只会实例化一次,就达到数据共享目的 TreeNode treeNode1 = new TreeNode(3, 4, TreeFactory.getTree("xxx", "xxxxxxx")); TreeNode treeNode2 = new TreeNode(5, 9, TreeFactory.getTree("xxx", "xxxxxxx")); }
3. 优点
如果系统有大量类似的对象,可以节省大量的内存及CPU资源
4. JDK源码应用
String,Integer,Long...com.sun.org.apache.bcel.internal.generic.InstructionConstants