码迷,mamicode.com
首页 > 其他好文 > 详细

享元模式

时间:2020-02-28 15:33:15      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:info   个数   return   class   逻辑   man   ret   运行   override   

让某个类的一个示例能用来提供多个“虚拟实例”

类图

技术图片

 (来源: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());
    }
}

运行结果

技术图片

 

优点

  • 减少运行时对象实例个数,节约内存。

缺点

  • 单个逻辑实例无法拥有独立而不同的行为。

享元模式

标签:info   个数   return   class   逻辑   man   ret   运行   override   

原文地址:https://www.cnblogs.com/camcay/p/12377339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!