枚举的单例模式的使用方法
发布日期: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 Map
stockAreaMap; 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();}

如何使用上面的代码呢?

使用方法:

Map
stockofArea = ComponentStockEnum.stockofArea.getStockAreaMap();//股票与地区的对应关系 Map
> stockofIndexCode = ComponentStockEnum.stockofIndexCode.getStockIndexMap();//股票与指数 Map
stockofIndustryCode = ComponentStockEnum.stockofIndustryCode.getStockIndustryMap();//股票与行业(申万二级)

这里说明下,我并不是参考了下面文档,才写出来上面代码。只是看了下面的文档后,才使用枚举单例模式,因为之前不知道哪种最好。

枚举如何使用,我是在YouTube上找教程,学会的。

上一篇:java代码通过ssh免密操作远程服务器shell
下一篇:linux后台启动进程并记录进程ID

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月23日 03时46分21秒