设计模式——享元模式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}}

总结

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

代码下载

代码下载

相关推荐
鲨鱼辣钊3 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
学长毕业设计7 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
东小西7 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西7 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午7 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_962065257 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql
小范同学_8 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
予昊9 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
2601_962203519 小时前
【SpringAI入门】初识SpringAI
java
weixin_461408589 小时前
Mybatis-flex小记
java·开发语言·mybatis