虚函数与泛型的结合应用

来源:互联网 发布:类似音悦台的软件 编辑:程序博客网 时间:2024/06/16 10:58
<pre name="code" class="java">public abstract class AbstractCommonQuartzJob<T extends IQuartzCommonSIDSV> implements Job  {private static Logger logger = LoggerFactory.getLogger(AbstractCommonQuartzJob.class);@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {JobDataMap jobDataMap = null;String provinceCode = null ;Map<String,String> extendParams =  new java.util.HashMap<>();if(context == null){} else {jobDataMap = context.getJobDetail().getJobDataMap();//获取设置的省分编码;provinceCode = jobDataMap.getString(JobConstants.JobParam_ProvinceCode);for(String key : jobDataMap.keySet()){if( jobDataMap.get(key) != null){extendParams.put(key,jobDataMap.getString(key));}}}IQuartzCommonSIDSV sv = this.getService();try{if(StringUtils.isEmpty(provinceCode)){logger.info("定时任务开始,获取的省分编码为空,执行所有省分处理");sv.dealQuartz(extendParams);} else {logger.info("定时任务开始,获取的省分编码列表为:"+provinceCode);String[] provinceCodes = provinceCode.split(JobConstants.JobParam_SPLIT);sv.dealQuartzByProvinceCodes(provinceCodes,extendParams);}} catch(Exception e){logger.error("定时任务失败!", e);throw new JobExecutionException(e);} finally {logger.info("定时任务结束!");}}/** * 获取 对应的服务; * @return * @author yugn */abstract protected T getService();}



上述虚拟类

@DisallowConcurrentExecutionpublic class SmsSendJob extends AbstractCommonQuartzJob<IQuartzSmsSendSIDSV> {@Overrideprotected IQuartzSmsSendSIDSV getService() {return  (IQuartzSmsSendSIDSV) QuartzContextHolder.getBean(JobConstants.SmsSendService);}public static void main(String[] args) throws JobExecutionException {SmsSendJob job = new SmsSendJob();job.execute(null);}}

这是实现类



泛型和虚拟类的使用,使得业务代码被完全封装,本质类似于适配器模式,但一层虚拟函数与泛型的使用,拓展了适配器模式中继承类选择,可以看做是适配器模式的拓展。

将服务类的对象实现了配置,从配置文件读取。



0 0
原创粉丝点击