枚举的单例模式的使用方法
来源:互联网 发布:双十一网络销售情况 编辑:程序博客网 时间:2024/05/17 21:52
环境
操作系统: window7
IDE: STS
java:java7
需求
最近在写一个job时,是每5分钟跑一次,其中业务逻辑分别是先获取地区的成分股、指数的成分股、行业的成分股。也就是得到了相应的三个map集合。并且这些成分股集合一般是不会变得(至少在一天内)。我们都知道金融行业,特别是最近,几乎每天都有新股上市,所以呢?地区的成分股每天都会变。指数呢?比如:沪深300、上证50、差不多有可能几个季度都不会变。我现在的代码是,job每5分钟跑的时候,都会重新请求查询数据库。这样明显是浪费服务器的资源。根据上述的需求,最好是每天去请求一次。
枚举 单例模式
在众多的单例模式中,最好的方式自然是枚举形式的单例模式。优点我就不列出了。
我先贴出我的代码:
public enum ComponentStockEnum { stockofArea("area"), stockofIndexCode("index"), stockofIndustryCode("industry"); private Map<String, Object> stockAreaMap; private Map<String, List<String>> stockIndexMap; private Map<String, Object> 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<String, Object> getStockAreaMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockAreaMap; } public void setStockAreaMap(Map<String, Object> stockAreaMap) { this.stockAreaMap = stockAreaMap; } public Map<String, Object> getStockIndustryMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockIndustryMap; } public void setStockIndustryMap(Map<String, Object> stockIndustryMap) { this.stockIndustryMap = stockIndustryMap; } public Map<String, List<String>> getStockIndexMap() { if(DateUtil.compare(DateUtil.getBeginOfDay(), this.preDate)>0){ reLoadStock(); } return stockIndexMap; } public void setStockIndexMap(Map<String, List<String>> 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();}
如何使用上面的代码呢?
使用方法:
Map<String, Object> stockofArea = ComponentStockEnum.stockofArea.getStockAreaMap();//股票与地区的对应关系 Map<String, List<String>> stockofIndexCode = ComponentStockEnum.stockofIndexCode.getStockIndexMap();//股票与指数 Map<String, Object> stockofIndustryCode = ComponentStockEnum.stockofIndustryCode.getStockIndustryMap();//股票与行业(申万二级)
这里说明下,我并不是参考了下面文档,才写出来上面代码。只是看了下面的文档后,才使用枚举单例模式,因为之前不知道哪种最好。
枚举如何使用,我是在YouTube
上找教程,学会的。
如何正确地写出单例模式
单例模式中为什么用枚举更好
Java 语言中 Enum 类型的使用介绍
1 0
- 枚举的单例模式的使用方法
- 单例模式(增加枚举类型的单例模式)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举实现的单例模式
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举类型的单例模式(java)
- 枚举enum的单例模式
- 单例模式的正确使用方法
- Java的单例模式使用方法
- 用枚举的方式实现单例模式
- Java的单例模式和枚举类
- 枚举类型的单例模式(java)五种
- 16-TCP 协议(同时关闭)
- 如何搭建一个完整的视频直播系统
- 【jquery】取值、赋值的基本方法整理
- Java重写与重载
- 判断datetime为空的方法
- 枚举的单例模式的使用方法
- 学习笔记:TensorFlow Wide & Deep Learning Tutorial
- 武大校赛 26. Lost in WHU(矩阵快速幂)
- TLS协议分析 (四) handshake协议概览
- poj 2309
- 图片64位加密
- 前端中的那些注释
- [http] WinInet发送或接收函数超时的bug & 解决办法
- LeetCode 9. Palindrome Number