之前学习设计模式写了些demo,地址如下,代码中含设计模式的介绍
实际工作中单例模式、工厂模式、代理模式用的较多。
最近实现数据库多张表同时更新还用了责任链模式,挺有意思的,在此记录一下
·责任链模式顶级接口
package com.tycho.flower.service;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
import com.tycho.flower.entity.DataRecords;
import com.tycho.flower.object.DataRecordsDto;
/**
* @ClassName: AbstractWheelDataSaveChain
* @Description: TODO(责任链接口)
* @author ll
* @date 2020-03-25 03:23:27
*/
public abstract class AbstractWheelDataSaveChain
{
protected AbstractWheelDataSaveChain nextHandler;
protected String operation;
protected boolean onOff;
public void setNextHandler(AbstractWheelDataSaveChain handler,boolean onOff,String operation){
this.nextHandler = handler;
this.onOff = onOff;
this.operation = operation;
}
/**
* 保存检测记录
* @Title: saveHandler
* @Description: TODO(保存检测记录)
* @param dataRecDto
* @return
* @author ll
* @date 2020年3月30日
*/
public abstract String saveHandler(JSONObject jsonStr);
}
责任链接口实现类,列举一二如下
package com.tycho.flower.service;
import java.util.List;
import java.util.Map;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import com.alibaba.fastjson.JSONObject;
import com.tycho.flower.entity.Axle;
import com.tycho.flower.entity.EngineBasic;
/**
*
* @ClassName: EngineBasicService
* @Description: TODO(描述)
* @author ll
* @date 2020-03-30 01:58:45
*/
public abstract class EngineBasicService extends AbstractWheelDataSaveChain{
}
package com.tycho.flower.service;
import com.alibaba.fastjson.JSONObject;
/**
*
* @ClassName: WheelBasicService
* @Description: 车轴service
* @author ll
* @date 2020-04-09 09:20:17
*/
public abstract class WheelBasicService extends AbstractWheelDataSaveChain
{
}
实现类列举一个吧
package com.tycho.flower.service.impl;
import java.util.Comparator;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationOptions;
import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.tycho.flower.dao.EngineBasicDao;
import com.tycho.flower.dao.MemberDao;
import com.tycho.flower.dao.OnlineDetectDao;
import com.tycho.flower.dao.OrganizationDao;
import com.tycho.flower.entity.Axle;
import com.tycho.flower.entity.Carriage;
import com.tycho.flower.entity.DetectedRecord;
import com.tycho.flower.entity.EngineBasic;
import com.tycho.flower.entity.Wheel;
import com.tycho.flower.object.AxleInfoVo;
import com.tycho.flower.object.Member;
import com.tycho.flower.object.Organization;
import com.tycho.flower.object.Organization.OrganizationEngineType;
import com.tycho.flower.service.EngineBasicService;
import com.tycho.flower.utils.DateUtil;
import com.tycho.flower.utils.Null;
/**
*
* @ClassName: EngineBasicServiceImpl
* @Description: TODO(描述)
* @author shenjuntao
* @date 2020-03-30 02:00:21
*/
@Component
public class EngineBasicServiceImpl extends EngineBasicService {
@Autowired
private EngineBasicDao engineBasicDao;
@Autowired
private MemberDao memberDao;
@Autowired
private OnlineDetectDao onlineDetectDao;
@Autowired
private OrganizationDao orgDao;
private static final String SS3B ="SS3B";
private static final String HXD1 ="HXD1";
/**
* @Title: saveHandler
* @Description: TODO(Oh!look,It's a shit mountain)
* @param jsonObject
* @return String
* @see com.tycho.flower.service.AbstractWheelDataSaveChain#saveHandler(java.util.List)
* @author abel
* @date 2020-03-27 11:36:08
*/
@Override
@Transactional
public String saveHandler(JSONObject jsonObject) {
if (!onOff) {
return null;
}
String addenginebasic = "addenginebasic";
String addaxle = "addaxle";
String editaxle = "editaxle";
String repairdown = "repairdown";
String exchangeaxle = "exchangeaxle";
//装车里面点击修程上车
String repairup = "repairup";
String sparerepairup = "sparerepairup";
String updateenginetype = "updateenginetype";
String addrepairrecord = "addrepairrecord";
String returnJson = null;
Gson gson = new Gson();
if(addenginebasic.equals(operation)){
}else if(editaxle.equals(operation)){
editAxle(jsonObject);
}else if(repairdown.equals(operation)) {
repairDown(jsonObject);
}
else if(exchangeaxle.equals(operation)) {
}else if(sparerepairup.equals(operation)){
spareRepairUp(jsonObject);
}else if(repairup.equals(operation)){
returnJson = repairUp(jsonObject);
}else if(updateenginetype.equals(operation)){
}
/** 设置下一个要保存数据的动作类 */
if (null != this.nextHandler) {
nextHandler.saveHandler(jsonObject);
return returnJson;
}
return returnJson;
}
}
controller中使用
package com.tycho.flower.web.controller;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.tycho.flower.entity.Axle;
import com.tycho.flower.entity.EngineBasic;
import com.tycho.flower.service.EngineBasicService;
import com.tycho.flower.service.OrganizationService;
import com.tycho.flower.service.TurnOverService;
import com.tycho.flower.service.WheelBasicService;
import com.tycho.flower.utils.FileUtils;
import com.tycho.flower.utils.Null;
import com.tycho.flower.utils.ResponseBo;
/**
*
* @ClassName: EngineBasicController
* @Description: TODO(描述)
* @author ll
* @date 2020-03-30 02:09:37
*/
@RestController
@ComponentScan(basePackages = { "com.tycho.flower.service" })
public class EngineBasicController {
private static final Logger LOGGER = LoggerFactory.getLogger(EngineBasicController.class);
@Autowired
private EngineBasicService engineBasicService;
@Autowired
private OrganizationService orgService;
@Autowired
private WheelBasicService wheelBasicService;
@Autowired
private TurnOverService turnOverService;
@PostMapping(value = "engineBasic/saveAxle")
public Map<String, Object> saveAxle(HttpServletRequest request, @RequestBody String jsonStr) {
JSONObject json = JSONObject.parseObject(jsonStr);
Map<String, Object> result = new HashMap<>();
try {
String operation = "addaxle";
wheelBasicService.setNextHandler(engineBasicService, true, operation);
engineBasicService.setNextHandler(orgService, true, operation);
orgService.setNextHandler(turnOverService, true, operation);
turnOverService.setNextHandler(null, true,operation );
String returnJson = wheelBasicService.saveHandler(json);
result.put("data", JSONArray.parseArray(returnJson));
result.put("flag", true);
result.put("msg", "添加成功");
return result;
} catch (Exception e) {
LOGGER.error("",e);
result.put("flag", false);
result.put("msg", "添加失败");
return result;
}
}
}
此处engineBasicService; orgService;wheelBasicService; turnOverService都实现了责任链接口AbstractWheelDataSaveChain,当一个engineBasic/saveAxle请求进来就会通过setNextHandler()方法组装一条任务执行链式结构,通过传入参数动态控制责任链的终止,传入要处理的参数
补充:文中一个请求更新数张表的做法本就十分不合理,奈何项目经理执意如此,然后整合了责任链使这个业务变得简单且可扩展点。生活、生活!