享元模式又称缓存模式:把一个实体的数据分成两个部分,一部分为静态数据,一部分为动态数据,分开存储。 目的减少重复信息的数据加载。如:秒杀环境下,商品1 数量为 10000000, 我们只需把。一个商品的静态信息加载到内存,实时数据如库存信息由访问Redis实时获取。
设计模式,一定要敲代码理解
实体
java
/**
* @author ggbond
* @date 2024年04月09日 08:17
*
*/
public class Commodity {
private long cid;
private String name;
private String type;
private String typeId;
private String desc;
//库存属性 是动态的,拆分成一个类 stockManage
private stockManage stockManage;
}
享元实体
java
public class stockManage {
private int saleNum; //共计数量
private int soldNum; //已卖数量
}
享元工厂
java
public class CommodityFactory {
private static Map<Long,Commodity> map=new HashMap<>();
public static Commodity getCommodity(Long cid){
if (map.containsKey(cid)) {
return map.get(cid);
}else {
//查询数据库返回
Commodity commodity=new Commodity(2l,"耳机","电子产品","001","这是耳机");
return commodity;
}
}
}
调用封装
java
public static void main(String[] args) {
//数据库获取商品静态信息
Commodity commodity = CommodityFactory.getCommodity(1l);
//redis等获取实时 商品库存信息
stockManage stockManage=new stockManage(100,50);
//商品信息组合
commodity.setStockManage(stockManage);
//返回给客户端
System.out.println(commodity.toString());
}
java
Commodity{cid=2, name='耳机', type='电子产品', typeId='001', desc='这是耳机', stockManage=stockManage{saleNum=100, soldNum=50}}
总结
有很多相似对象需加载,将可以节省大量内存。用时间换空间,适合秒杀等场景。