设计模式|享元模式的思路整理
目的是为了节省不必要的重复开销,尽可能减少相似类的重复创建。
可以想象有一个地图,里面有很多树,但是种类就那么几种,
所以不需要创建太多的树对象,这种情况并不适合用单例,可以采用享元模式。
树节点对象:
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","第二种树");
}
}
执行结果如下:
推荐阅读
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 设计模式-代理模式-Proxy
- 【译】Rails|【译】Rails 5.0正式发布(Action Cable,API模式等)
- java静态代理模式
- VueX(Vuex|VueX(Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式)
- Kotlin基础(10)-代理模式在kotlin中的使用
- 长谈的确是这个时代需要的一种模式
- 《读_Head_First_有感》_“命令模式”
- 洗洗睡了|洗洗睡了 | 休息的时候,千万注意切换你的行为模式
- 设计模式【15】--从审批流中学习责任链模式