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

总结

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

代码下载

代码下载

相关推荐
雨中飘荡的记忆21 分钟前
Java + Groovy计费引擎详解
java·groovy
嘟嘟w21 分钟前
JVM(Java 虚拟机):核心原理、内存模型与调优实践
java·开发语言·jvm
合作小小程序员小小店21 分钟前
web开发,在线%药店管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·jdk·html·intellij-idea
ZHE|张恒22 分钟前
设计模式(八)组合模式 — 以树结构统一管理对象层级
java·设计模式·组合模式
TDengine (老段)25 分钟前
TDengine 转换函数 CAST 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ29 分钟前
java实现校验sql中,表字段在表里是否都存在,不存在的给删除掉
java·sql
编程火箭车36 分钟前
【Java SE 基础学习打卡】15 分隔符、标识符与关键字
java·java入门·标识符·关键字·编程基础·分隔符·语法规则
灰色人生qwer37 分钟前
idea teminal和 window cmd 输出java version不一致
java·ide·intellij-idea
WayneJoon.H1 小时前
Java反序列化 CC7链分析
java·安全·网络安全·cc链·反序列化
liu_bees1 小时前
Jenkins 中修改 admin 账号密码的正确位置与方法
java·运维·tomcat·jenkins