
枚举的单例模式的使用方法
发布日期:2021-05-07 04:26:12
浏览次数:20
分类:精选文章
本文共 3106 字,大约阅读时间需要 10 分钟。
环境
操作系统: window7
IDE: STS java:java7需求
最近在写一个job时,是每5分钟跑一次,其中业务逻辑分别是先获取地区的成分股、指数的成分股、行业的成分股。也就是得到了相应的三个map集合。并且这些成分股集合一般是不会变得(至少在一天内)。我们都知道金融行业,特别是最近,几乎每天都有新股上市,所以呢?地区的成分股每天都会变。指数呢?比如:沪深300、上证50、差不多有可能几个季度都不会变。我现在的代码是,job每5分钟跑的时候,都会重新请求查询数据库。这样明显是浪费服务器的资源。根据上述的需求,最好是每天去请求一次。
枚举 单例模式
在众多的单例模式中,最好的方式自然是枚举形式的单例模式。优点我就不列出了。
我先贴出我的代码:
public enum ComponentStockEnum { stockofArea("area"), stockofIndexCode("index"), stockofIndustryCode("industry"); private MapstockAreaMap; private Map > stockIndexMap; private Map stockIndustryMap; private Date preDate; private ComponentStockEnum(String code) { if("area".equals(code)){ stockAreaMap =ComponentStockService.getStockofArea();//股票与地区的对应关系 }else if("index".equals(code)){ stockIndexMap = ComponentStockService.getStockofIndexCode();//股票与指数 }else if("industry".equals(code)){ stockIndustryMap = ComponentStockService.getStockofIndustryCode();//股票与行业(申万二级) } this.preDate = DateUtil.getBeginOfDay(); } /** * 由于使用的是单例模式,以下代码是为了每天都重新获取一次成分股 * * * @author yutao * @date 2017年4月10日下午2:44:33 */ public void reLoadStock(){ this.stockAreaMap.clear(); this.stockIndexMap.clear(); this.stockIndustryMap.clear(); this.stockAreaMap = ComponentStockService.getStockofArea();//股票与地区的对应关系 this.stockIndexMap = ComponentStockService.getStockofIndexCode();//股票与指数 this.stockIndustryMap = ComponentStockService.getStockofIndustryCode();//股票与行业(申万二级) this.preDate = DateUtil.getBeginOfDay(); } public Map getStockAreaMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockAreaMap; } public void setStockAreaMap(Map stockAreaMap) { this.stockAreaMap = stockAreaMap; } public Map getStockIndustryMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockIndustryMap; } public void setStockIndustryMap(Map stockIndustryMap) { this.stockIndustryMap = stockIndustryMap; } public Map > getStockIndexMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockIndexMap; } public void setStockIndexMap(Map > stockIndexMap) { this.stockIndexMap = stockIndexMap; } public Date getPreDate() { return preDate; } public void setPreDate(Date preDate) { this.preDate = preDate; }}
由于每天重新获取数据一次,所以我在每个get
的方法中,添加了如下判断:
if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock();}
如何使用上面的代码呢?
使用方法:
MapstockofArea = ComponentStockEnum.stockofArea.getStockAreaMap();//股票与地区的对应关系 Map > stockofIndexCode = ComponentStockEnum.stockofIndexCode.getStockIndexMap();//股票与指数 Map stockofIndustryCode = ComponentStockEnum.stockofIndustryCode.getStockIndustryMap();//股票与行业(申万二级)
这里说明下,我并不是参考了下面文档,才写出来上面代码。只是看了下面的文档后,才使用枚举单例模式,因为之前不知道哪种最好。
枚举如何使用,我是在YouTube
上找教程,学会的。 发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月23日 03时46分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android 开发学习进程0.25 自定义控件
2021-05-09
多媒体文件格式全解说(下)--图片
2021-05-09
淘宝WAP版小BUG分析
2021-05-09
asp.net打印网页后自动关闭网页【无需插件】
2021-05-09
【Maven】POM基本概念
2021-05-09
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2021-05-09
【设计模式】单例模式
2021-05-09
远程触发Jenkins的Pipeline任务的并发问题处理
2021-05-09
entity framework core在独立类库下执行迁移操作
2021-05-09
Asp.Net Core 2.1+的视图缓存(响应缓存)
2021-05-09
【wp】HWS计划2021硬件安全冬令营线上选拔赛
2021-05-09
Ef+T4模板实现代码快速生成器
2021-05-09
JQuery选择器
2021-05-09
多线程之volatile关键字
2021-05-09
2.2.2原码补码移码的作用
2021-05-09
Java面试题:Servlet是线程安全的吗?
2021-05-09
Java集合总结系列2:Collection接口
2021-05-09
Linux学习总结(九)—— CentOS常用软件安装:中文输入法、Chrome
2021-05-09
比技术还重要的事
2021-05-09
linux线程调度策略
2021-05-09