场景:当我们接收到一些数据需要对其进行处理时,由于它们来自于不同的渠道(如:360,广开,厦开),不同开发商推送过来的数据在平台的处理方式不同。
下面我们写一个简单Demo来实现该的场景。
抽象类 处理推送过来的数据
public abstract class HandleData {
public abstract void process(String channel);
}
360开发商 处理逻辑
public class HandleData360 extends HandleData{
private final static Logger logger= LoggerFactory.getLogger(HandleData360.class);
@Override
public void process(String channel,String jsonData) {
logger.info("360处理逻辑"+jsonData+"...");
}
}
广开 处理逻辑
public class HandleDataTencent extends HandleData {
private final static Logger logger= LoggerFactory.getLogger(HandleDataTencent.class);
@Override
public void process(String channel,String jsonData) {
logger.info("广开处理逻辑"+jsonData+"...");
}
}
枚举 区分不同开发商
public enum HandleDataEnum {
//360
HANDLEDATA360("THREEANDSIX",new HandleData360()),
//广开
HANDLEDATAXIAKAI("xiakai",new HandleDataTencent());
private String name; //数据来源名称
private HandleData handleData; //处理数据类
HandleDataEnum(String name,HandleData handleData){
this.name=name;
this.handleData=handleData;
}
//匹配不同数据来源
public static HandleDataEnum match(String name){
HandleDataEnum[] values=HandleDataEnum.values();
for(HandleDataEnum value:values){
if(value.name.equals(name)){
return value;
}
}
return null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HandleData getHandleData() {
return handleData;
}
public void setHandleData(HandleData handleData) {
this.handleData = handleData;
}
}
controller层
@RestController
@RequestMapping("/testData")
public class TestDataController {
@GetMapping("/handleData/{jsonData}")
public HashMap<String,Object> handleData(@PathVariable("jsonData") String jsonData,
@RequestParam(name = "name",defaultValue = "") String name){
HandleDataEnum dataEnum = HandleDataEnum.match(name);
HandleData handleData = dataEnum.getHandleData();
handleData.process(name,jsonData);
HashMap<String, Object> resultMap=new HashMap<>();
resultMap.put("code","200");
resultMap.put("message","处理成功");
return resultMap;
}
}
这样可以在 不同开发商推送的数据中 添加一个标识 来标记开发商来源。