策略模式
业务场景:操作类型三种。0、1、2、为了层次清晰,减少if判断,所以使用。
目录结构:
1、server类
@Transactional
public void saveQuestion(QuestionRequest request) {
IQuestionSaveHandler handler = null;
try {
handler = SpringContextHolder.getBean(IQuestionSaveHandler.QUESTION_SAVE_HANDLER_BEAN_PREFIX+request.getHandlerType(), IQuestionSaveHandler.class);
}catch(Exception e) {
throw new IntfException("未知的处理类型 "+request.getHandlerType());
}
handler.questionSave(request);
}
2、IQuestionSaveHandler类
public interface IQuestionSaveHandler {
public final static String QUESTION_SAVE_HANDLER_BEAN_PREFIX = "questionSaveHandler_";
/**
* 问题保存
*/
public void questionSave(QuestionRequest request);
}
3、AbstractQuestionSaveHandler类
package com.yemast.road.roadpatrol.server.service.strategy.questionsave;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cglib.beans.BeanCopier;
import com.yemast.road.roadpatrol.server.service.strategy.IQuestionSaveHandler;
import com.yemast.road.roadsso.common.exception.IntfException;
import com.yemast.road.roadsso.common.util.CommonUtil;
/**
* 抽象类
*
*
*/
public abstract class AbstractQuestionSaveHandler implements IQuestionSaveHandler {
@Autowired
protected SectionService sectionService;
@Autowired
protected InformationService informationService;
@Autowired
protected UserQuestionService userQuestionService;
@Override
public void questionSave(QuestionRequest request) {
// 方法体
public abstract void doProcess(Question question, QuestionRequest request);
}
4、QuestionSaveHandlerImmediate 类
package com.yemast.road.roadpatrol.server.service.strategy.questionsave;
import com.yemast.road.roadpatrol.core.entity.patrol.Question;
import com.yemast.road.roadpatrol.core.entity.patrol.QuestionProcess;
@Service(IQuestionSaveHandler.QUESTION_SAVE_HANDLER_BEAN_PREFIX+"0")
public class QuestionSaveHandlerImmediate extends AbstractQuestionSaveHandler{
@Override
public void doProcess(Question question, QuestionRequest request) {
//方法体
}
}
5、QuestionSaveHandlerInstructions 类
package com.yemast.road.roadpatrol.server.service.strategy.questionsave;
import com.yemast.road.roadpatrol.core.response.PushParams;
import org.springframework.stereotype.Service;
import com.yemast.road.roadpatrol.core.entity.patrol.Question;
import com.yemast.road.roadpatrol.core.entity.patrol.QuestionProcess;
@Service(IQuestionSaveHandler.QUESTION_SAVE_HANDLER_BEAN_PREFIX+"2")
public class QuestionSaveHandlerInstructions extends AbstractQuestionSaveHandler{
@Override
public void doProcess(Question question, QuestionRequest request) {
//方法体
}
}
6、QuestionSaveHandlerNotify 类
package com.yemast.road.roadpatrol.server.service.strategy.questionsave;
import com.yemast.road.roadpatrol.core.response.PushParams;
import org.springframework.stereotype.Service;
import com.yemast.road.roadpatrol.core.entity.patrol.Question;
import com.yemast.road.roadpatrol.core.entity.patrol.QuestionProcess;
import com.yemast.road.roadpatrol.core.entity.patrol.Task;
@Service(IQuestionSaveHandler.QUESTION_SAVE_HANDLER_BEAN_PREFIX+"1")
public class QuestionSaveHandlerNotify extends AbstractQuestionSaveHandler{
@Override
public void doProcess(Question question, QuestionRequest request) {
//方法体
}
}
努力与成功或许不一定成正比,但绝不会成反比