设计模式|享元模式的思路整理

目的是为了节省不必要的重复开销,尽可能减少相似类的重复创建。
可以想象有一个地图,里面有很多树,但是种类就那么几种,
所以不需要创建太多的树对象,这种情况并不适合用单例,可以采用享元模式。
树节点对象:

package flyweight; /** * @Auther: 苏察哈尔丶灿 * @Date: 2020/8/7 15:40 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */ public class Tree { public final String name; public final String data; public Tree(String name, String data) { this.name = name; this.data = https://www.it610.com/article/data; System.out.println("Tree + " + this.name + " Created"); } }

【设计模式|享元模式的思路整理】工厂类:
package flyweight; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @Auther: 苏察哈尔丶灿 * @Date: 2020/8/7 15:42 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */ public class TreeFactory { private Map, Tree> map = new ConcurrentHashMap, Tree>(); public Tree getTree(String name,String data) {if(!map.containsKey(name)){ map.put(name,new Tree(name,data)); }return map.get(name); }}

测试用例:
package flyweight; /** * @Auther: 苏察哈尔丶灿 * @Date: 2020/8/7 15:40 * @Slogan: 我自横刀向天笑,笑完我就去睡觉。 */ public class Test { public static void main(String[] args) { TreeFactory tf = new TreeFactory(); tf.getTree("xxx","第一种树"); tf.getTree("xxx","第一种树"); tf.getTree("yyy","第二种树"); tf.getTree("yyy","第二种树"); } }

执行结果如下:

    推荐阅读