设计模式——享元模式11

news/2024/7/21 3:53:51 标签: 设计模式, 享元模式, java

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

总结

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

代码下载

代码下载


http://www.niftyadmin.cn/n/5479873.html

相关文章

求三角形面积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <math.h>int main() {//初始化变量值&#xff1b;double a, b, c, s, area;//赋值&#xff1b;a 3.67;b 5.43;c 6.21;//运算求s&#xff1b…

halcon缺陷检测-印刷品检测(差异化模型),键盘字符缺陷检测

前言 在实际项目中&#xff0c;印刷品缺陷检测是缺陷检测中的难点项目。通常印刷品检测往往具备缺陷小&#xff0c;缺陷所在位置不固定&#xff0c;出现少印或者多印的情况。并且由于产线原因&#xff0c;大量的印刷品在视野中的大小并不是完全一致的&#xff0c;可能出现细微…

Vue2 响应式原理

Vue 的响应式原理 Vue 的响应式原理基于"数据劫持"和"依赖收集"的概念。当我们将一个普通的 JavaScript 对象传递给 Vue 实例的 data 选项时&#xff0c;Vue 将遍历此对象的所有属性&#xff0c;并使用 Object.defineProperty()来对每个属性进行 getter 和…

计算机网络----第六天

TCP和UDP的基本原理 传输层的作用&#xff1a; 作用&#xff1a;建立端到端的连接&#xff1b; TCP可靠传输 UDP不可靠传输 多路复用 对应用层进行分段 流量控制 TCP相关知识&#xff1a; 1、面向连接 2、可靠性传输 3、传输速度慢&#xff0c;延迟高 4、适用于完整性要…

在 vscode 中使用 Cascadia Code 字体 ( => === 连体字 )

需要先到 Github 上下载字体的压缩包 Releases microsoft/cascadia-code GitHub 下载解压好之后 打开 tts 文件&#xff0c;安装 Cascadia Code 字体 接着在 vs code 中做两步操作&#xff1a; 1&#xff09;配置字体 打开设置搜索 控制字体系列&#xff0c;修改为以下…

C++ new关键字的一些特殊用法

placement new i.普通的new关键字申请内存空间时&#xff0c;是从系统的堆中分配的空间&#xff0c;申请所得到的空间的位置是根据当时的内存的实际使用情况来决定的。 ii.placement new就是特殊情况下&#xff0c;需要在指定的特定内存去创建对象&#xff0c;就是定位放置new…

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表&#xff0c;其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术&#xff0c;以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前&#xff0c;首先需要进行充…

SpringCloud的使用以及五大核心组件

一、SpringCloud介绍 微服务架构的提出者&#xff1a;马丁福勒 https://martinfowler.com/articles/microservices.html // 微服务架构的提出者&#xff1a;马丁福勒&#xff08;中午网&#xff09; http://blog.cuicc.com/blog/2015/07/22/microservices/ 马丁.福勒对微服务…