Bootstrap

java工厂类_Java工厂模式应用

之前在项目中遇到这样一种情景:代码中有一个共用的任务处理模块,不同的数据会通过唯一键(任务名称和key fields)全部存入公共任务表里,然后在同步模块通过任务名称去获取相应的任务进行同步处理。

在存入公共任务表之前,不同的任务线都会进行各自的逻辑处理,而且基本上不存在共用的代码,所以在这里考虑建一个工厂类,由Spring注入一个Map,String对应的各个任务的名称,interface对应的是每个任务的处理接口。e.g.

工厂类CommonTaskFactory的代码如下:

public class CommonTaskFactory {

private Map serviceMap;

/**

* Create a task service by taskName.

*

* @param serviceName

* @return

*/

public AbstractCommonService create(String taskKey){

return serviceMap.get(taskKey);

}

/**

*

* @param serviceMap

*/

public void setServiceMap(Map serviceMap) {

this.serviceMap = serviceMap;

}

}

接口AbstractCommonService定义如下:

public interface AbstractCommonService {

/**

* save a task to workingCommonTask

*

* @param matchedVideo

* @param taskName

* @param matchType

* @param priority

*/

void addWorkingTask(MatchedVideo matchedVideo, CommonTaskName taskName, MatchType matchType);

}

工厂类方法调用代码示例如下:

AbstractCommonService linkingService = commonTaskFactory.create(CommonTaskKey.LINKINGDETECT.getCode());

linkingService.addWorkingTask(matchedVideo, CommonTaskName.SYNC_ADD_VIDEO_TO_TAISAN, null);

注:另外还有一种场景,各种任务存入公共任务表之前也许会存在很多的冗余代码(有很多的代码逻辑都是基本相同的),那么此时可以写一个抽象类(实现接口AbstractCommonService),把共用的代码写在该类中(每个任务线之间不同的部分可以使用抽象方法实现),然后各自不同的部分在各自的service类(继承抽象类)中实现父类中的抽象方法。

;