设计模式——享元模式11

享元模式又称缓存模式:把一个实体的数据分成两个部分,一部分为静态数据,一部分为动态数据,分开存储。 目的减少重复信息的数据加载。如:秒杀环境下,商品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}}

总结

有很多相似对象需加载,将可以节省大量内存。用时间换空间,适合秒杀等场景。

代码下载

代码下载

相关推荐
晨航1 小时前
Flink新版Source接口源码解析
java·大数据·flink
ccsd112 小时前
jmeter并发测试
java·jmeter
2401_857600954 小时前
电商系统开发:Spring Boot框架实战
java·spring boot·后端
WAXXD4 小时前
Java读取WPS excel.xlsx嵌入图片
java·excel·wps
yava_free4 小时前
详解一下JVM诊断方法和其工具的使用
java·开发语言
南宫生4 小时前
力扣-Hot100-二叉树其二【算法学习day.33】
java·数据结构·学习·算法·leetcode·动态规划
小吕学编程5 小时前
开发中SQL积累
java·数据库·sql
KevinAha5 小时前
Tomcat 8.5 源码导读
java·tomcat
她说人狗殊途5 小时前
设计模式学习
java·学习·设计模式
Mr.W.T5 小时前
JVM垃圾回收详解(重点)
java·jvm·算法