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

总结

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

代码下载

代码下载

相关推荐
七夜zippoe2 小时前
事务方案选型全景图:金融与电商场景的实战差异与落地指南
java·分布式·事务
杨二K3 小时前
认识HertzBeat的第一天
java·hertzbeat
DevilSeagull4 小时前
JavaScript WebAPI 指南
java·开发语言·javascript·html·ecmascript·html5
期待のcode5 小时前
Spring框架1—Spring的IOC核心技术1
java·后端·spring·架构
葵野寺6 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(七)
java·开发语言·网络·rabbitmq·java-rabbitmq
书院门前细致的苹果6 小时前
JVM 全面详解:深入理解 Java 的核心运行机制
java·jvm
上官浩仁6 小时前
springboot excel 表格入门与实战
java·spring boot·excel
Hello.Reader7 小时前
从零到一上手 Protocol Buffers用 C# 打造可演进的通讯录
java·linux·c#
树码小子7 小时前
Java网络初识(4):网络数据通信的基本流程 -- 封装
java·网络
稻草人想看远方7 小时前
GC垃圾回收
java·开发语言·jvm