Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >趣解设计模式之《小王设计的疫苗管理平台系统》

趣解设计模式之《小王设计的疫苗管理平台系统》

作者头像
爪哇缪斯
发布于 2023-10-06 04:39:44
发布于 2023-10-06 04:39:44
17200
代码可运行
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯
运行总次数:0
代码可运行

〇、小故事

小王所在公司又接到了一个大单子,就是需要他们开发一个用于给百姓们申请打疫苗的疫苗管理平台系统,在系统中需要填报自己的个人信息用于疫苗检测数据采集。采集表里包含:姓名居住地址要去哪个疫苗检测医院网点注射什么品牌的疫苗……。

小王作为公司的研发主力,自告奋勇地接手了开发任务。“不就是一个疫苗申请信息表吗?so easy~”,小王利用一个周末的时间,就把这个系统做出来了。周一上班,小王给老板演示了一下,老板非常满意。这个系统正是老板心中想到的模样。

周二系统正式上线,但是!没想到才经过了10分钟,系统就崩溃了!为什么啊?小王一查数据,才突然发现,在这短短10分钟,就是有100万人要填报自己的个人信息用于疫苗检测数据采集。系统的内存被打满了,内存溢出导致了系统崩溃。小王将所有用户需要填的信息都设计成了输入框,每个人都需要输入采集表中所有的个人信息,如果一份个人信息是1KB,那么100万用户就是将近1T的内存空间消耗了。

有什么好的解决办法吗?那么针对于这些信息,如果我们每个人填一份这样的信息,其实是对空间的浪费。因为,我们可以看出来,姓名和居住地址是个性化的,但是疫苗检测的医院或网点,以及疫苗的品牌这些都是固定的。那么我们就可以采取将这些通用实例池化,然后直接去池里获取即可。这个解决方式就是我们今天要介绍的设计模——享元模式/蝇量模式

一、模式定义

享元模式/蝇量模式flyweight Pattern

享元模式是池技术的重要实现方式,其定义如下:使用共享对象可以有效地支持大量的细粒度的对象

二、模式类图

根据上面的小故事,我们来绘制出相关模式的类图。首先,我们需要抽取原有疫苗信息中可以共享的部分,将这些信息池化起来NucleicInfoClient.java,然后,当我们需要展示用户信息的时候,其实分为了两个部分,一个是共享信息(池化信息)NucleicInfo.java,一个是个性化信息(非池化信息)PersonInfo.java,具体如下所示:

三、代码实现

人员信息实体类PersonInfo.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PersonInfo {
    // 姓名
    private String name;

    // 居住的详细地址
    private String address;

    // 疫苗医院或网点唯一标识
    private Integer nucleicId;
}

疫苗医院网点信息信息NucleicInfo.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Data
@AllArgsConstructor
@NoArgsConstructor
public class NucleicInfo {
    // 唯一标识
    private Integer id;

    // 疫苗医院网点名称
    private String name;
}

疫苗医院网点信息客户端类NucleicInfoClient.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class NucleicInfoClient {
    // 存储疫苗医院和网点的pool
    private HashMap<Integer, NucleicInfo> pool = Maps.newHashMap();

    // 构造函数中初始化池中数据
    public NucleicInfoClient() {
        NucleicInfo nucleicInfo;
        for (int i = 1; i <=10; i++) {
            nucleicInfo = new NucleicInfo(i, "北京市第" + i + "医院疫苗网点");
            pool.put(nucleicInfo.getId(), nucleicInfo);
        }
    }

    public NucleicInfo getNucleicInfo(Integer key) {
        if (key == null || !pool.containsKey(key)) 
            return null;
        
        return pool.get(key);
    }
}

蝇量模式测试类FlyweightTest.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FlyweightTest {
    private static NucleicInfoClient client = new NucleicInfoClient();

    public static void main(String[] args) {
        PersonInfo bob = new PersonInfo("bob", "北京市海淀区xx大街xx小区x号楼x号", 2);
        PersonInfo muse = new PersonInfo("muse", "北京市朝阳区yy大街yy小区y号楼y号", 7);
        PersonInfo john = new PersonInfo("john", "上海市市徐汇区zz大街zz小区z号楼z号", 4);

        printPersonInfo(bob);
        printPersonInfo(muse);
        printPersonInfo(john);
    }

    public static void printPersonInfo(PersonInfo personInfo) {
        NucleicInfo nucleicInfo = client.getNucleicInfo(personInfo.getNucleicId());
        System.out.println(String.format("姓名=%s 居住地址=%s 疫苗网点=%s", personInfo.getName(), personInfo.getAddress(),
                nucleicInfo.getName()));
    }
}

往期推荐

趣解设计模式之《小店儿菜单的故事》

趣解设计模式之《办理入职这么难吗?》

趣解设计模式之《同学们,交作业啦!》

趣解设计模式之《小王与他的Apple商店》

趣解设计模式之《珍爱生命,远离只狼》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-03 10:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
趣解设计模式之《小王设计的疫苗管理平台系统》
小王所在公司又接到了一个大单子,就是需要他们开发一个用于给百姓们申请打疫苗的疫苗管理平台系统,在系统中需要填报自己的个人信息用于疫苗检测数据采集。采集表里包含:姓名、居住地址、要去哪个疫苗检测医院网点、注射什么品牌的疫苗……。
爪哇缪斯
2023/09/26
1750
趣解设计模式之《小王设计的疫苗管理平台系统》
趣解设计模式之《同学们,交作业啦!》
小明学生在学校上完课回家,写完作业后,想要通过微信的方式,把作业提交给老师,但是呢,老师的微信没在线,估计是忙别的去了。
爪哇缪斯
2023/09/26
1900
趣解设计模式之《同学们,交作业啦!》
趣解设计模式之《小王的学习秘籍》
小王是学校的学霸,凭借着自己的天赋以及对于学习的刻苦,每次考试都能排到年级第一名。但是,他所在的班级总成绩却不高,在所有班级中,属于中游水平。老师希望通过小王的贡献,能否帮助整个班级同学分数都有一个提升。
爪哇缪斯
2023/09/18
2080
趣解设计模式之《小王的学习秘籍》
【万字图文】详解设计模式(下篇)
本篇关于设计模式的文章是设计模式的下篇,上下两篇文章介绍了整个23种设计模式中的22种,由于解释器模式主要应用场景是在解释器开发中,所以,该模式就只列举出了一些含义和使用场景,并没有类图和示例。而其他的22种设计模式,基本遵循的是:待解决的问题——>应用场景——>模式定义——>类图——>具体实现——>优缺点,这几方面来介绍的。那么,话不多说了,还是老样子,如下为本篇文章的整体目录:
爪哇缪斯
2023/05/10
1.2K0
【万字图文】详解设计模式(下篇)
【设计模式】第十一篇:来一起瞅瞅享元模式
前两天已经把 Redis 重新整理好了,一两天就可以发布出来啦~ 今天先继续看一下一个简单的设计模式
BWH_Steven
2021/01/24
3930
Java设计模式之享元模式
在软件设计模式中,享元模式是一种结构型模式,旨在有效地支持大量细粒度对象的共享。它通过共享相同状态的对象来最小化内存使用和提高性能。在Java中,享元模式是一个强大的工具,可用于处理大规模对象的场景,如图形用户界面(GUI)和游戏开发中的粒子系统。本教程将介绍Java中的享元模式,包括其定义、结构、工作原理以及实际应用。
刺槐儿
2024/01/29
2520
趣解设计模式之《珍爱生命,远离只狼》
小王最近打算入手一款叫《只狼》的游戏,这款游戏特别的硬核,也就是说,普通的小怪战斗力都特别的强,而作为主角的我们,也很容易被小兵打败。
爪哇缪斯
2023/09/21
1590
趣解设计模式之《珍爱生命,远离只狼》
Java设计模式之适配器模式
今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是220V,日本是110V,但是这个适配器能够把这些不同的电压转换为你需要的36V电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢?
CoderJed
2018/09/30
4140
Java设计模式之适配器模式
初探Java设计模式4:一文带你掌握JDK中的设计模式
转自https://javadoop.com/post/design-pattern
Java技术江湖
2019/10/13
3500
趣解设计模式之《小王的披萨店续集》
在《小王的披萨店》这篇文章中,我们介绍了小王开披萨店的故事,并且为了解决多种口味披萨的扩展问题,引出了简单工厂和工厂方法模式。但是,故事仍在继续,如果芝加哥的披萨店和纽约的披萨店,要求往披萨上面加的配料都不一样,那么如何可以规范多种类型披萨的创建呢?如下图所示:
爪哇缪斯
2023/10/06
2200
趣解设计模式之《小王的披萨店续集》
趣解设计模式之《为什么租房子要找中介?》
小王大学毕业了,打算来北京闯荡一下,于是就先寄宿到了他的表姐家,白天的时候,自己在外面小区转一转,看看能不能找到可以租到的房子,他找了好几天都没有找到合适的,要么就是小区里一张租房子的广告都没有,好不容易找到几个,里面的房间大小和价格又不合适。北京实在是太大了,而且这边人生地不熟的,找房子真的是耗费了他大量的力气。
爪哇缪斯
2023/10/06
1750
趣解设计模式之《为什么租房子要找中介?》
趣解设计模式之《小王看病记》
小王最近参与了公司一个大项目,工作很忙,经常加班熬夜,满负荷工作了2个月后,项目终于如期上线,并且客户反馈也特别的好。老板很开心,知道大家为这个项目付出了很多,所以给全组同事都放了1个星期的假。
爪哇缪斯
2023/09/19
1720
趣解设计模式之《小王看病记》
趣解设计模式之《小王看病记》
小王最近参与了公司一个大项目,工作很忙,经常加班熬夜,满负荷工作了2个月后,项目终于如期上线,并且客户反馈也特别的好。老板很开心,知道大家为这个项目付出了很多,所以给全组同事都放了1个星期的假。
爪哇缪斯
2023/09/13
1850
趣解设计模式之《小王看病记》
设计模式——享元模式
设计模式——享元模式
Java架构师必看
2021/05/14
2890
设计模式——享元模式
趣解设计模式之《办理入职这么难吗?》
小王大学毕业,经过大学期间的刻苦学习,终于成功的面试上了一家公司。按照约定的时间,小王兴高采烈的来到公司前台去办理入职手续。
爪哇缪斯
2023/09/26
1490
趣解设计模式之《办理入职这么难吗?》
趣解设计模式之《庞大的组织架构带来的烦恼》
小王在一家创业公司,随着公司业务的发展,团队人数也从之前的十人左右拓展为了几百人的团队。那么,对于几百人的公司,就需要有一套清晰的组织架构了,这样会更便于公司员工的管理,以及跨部门的协同工作(某部门的领导是谁?包含哪些子部门?我这件事儿应该去找哪个部门?等等)这件事情显得愈发迫在眉睫。
爪哇缪斯
2023/09/20
2480
趣解设计模式之《庞大的组织架构带来的烦恼》
趣解设计模式之《小王的披萨店》
小王看到最近越来越多的人喜欢吃披萨了,所以,他决定自己也开一个披萨店。最初开的时候,他只提供了一种口味的披萨,因为这样先试试水,看看生意如何,如果生意不好,也可以快速止损。
爪哇缪斯
2023/09/29
1700
趣解设计模式之《小王的披萨店》
趣解设计模式之《小王的糖果售卖机》
小王最近一直在寻找商机,他发现商场儿童乐园或者中小学校周围,会有很多小朋友喜欢吃糖果,那么他想设计一款糖果售卖机,让后将这些糖果售卖机布置到商场和学校旁边,这样就能获得源源不断的收益了。
爪哇缪斯
2023/09/23
1760
趣解设计模式之《小王的糖果售卖机》
趣解设计模式之《为什么租房子要找中介?》
小王大学毕业了,打算来北京闯荡一下,于是就先寄宿到了他的表姐家,白天的时候,自己在外面小区转一转,看看能不能找到可以租到的房子,他找了好几天都没有找到合适的,要么就是小区里一张租房子的广告都没有,好不容易找到几个,里面的房间大小和价格又不合适。北京实在是太大了,而且这边人生地不熟的,找房子真的是耗费了他大量的力气。
爪哇缪斯
2023/09/12
1940
趣解设计模式之《为什么租房子要找中介?》
【设计模式】-创建型模式-第2章第5讲-【对象池模式】
对象池模式 (The Object Pool Pattern) 是单例模式的一个变种,它提供了获取一系列相同对象实例的入口。当你需要对象来代表一组可替代资源的时候就变的很有用,每个对象每次可以被一个组件使用。
跟着飞哥学编程
2022/12/02
4630
相关推荐
趣解设计模式之《小王设计的疫苗管理平台系统》
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验