1.創(chuàng)建一個(gè)抽象類(lèi)务豺,方便責(zé)任規(guī)則傳遞悄谐。
抽象類(lèi)中熟菲,抽象類(lèi)作為自己的屬性。并創(chuàng)建一個(gè)抽象方法更米;
eg:
public abstract class RuleHandler {
? public RuleHandler successor;
? public RuleHandler getSuccessor() {
? ? ? return successor;
? }
? public void setSuccessor(RuleHandler successor) {
? ? ? this.successor = successor;
? }
? public abstract ApiResponse handlerRequest(RuleDto rule);
}
2.實(shí)現(xiàn)抽象類(lèi)方法欺栗。寫(xiě)自定義類(lèi)自己的邏輯。
eg:
3.多個(gè)責(zé)任類(lèi)實(shí)現(xiàn)抽象類(lèi)方法,書(shū)寫(xiě)各自邏輯代碼
4.責(zé)任鏈核心代碼引用迟几。
eg:
@Service
public class KruleService {
? private static final Logger LOG = LoggerFactory.getLogger(KruleService.class);
? @Autowired
? private RuleMapper ruleMapper;
? @Autowired
? private CheckTotalPrize checkTotalPrize;
? @Autowired
? private CheckFristHitPrize checkFristHitPrize;
? @Autowired
? private CheckMaxHitTime checkMaxHitTime;
? @Autowired
? private CheckHitRule checkHitRule;
? @Autowired
? private WinnerInfoMapper winnerInfoMapper;
? /**
? ? * 抽獎(jiǎng)規(guī)則校驗(yàn)
? ? * @param userId
? ? * @return
? ? */
? public ApiResponse checkRule(Integer userId,Integer userFriendsId){
? ? ? ApiResponse<Object> response = new ApiResponse<>();
//? ? 獲取有效的一個(gè)獎(jiǎng)品規(guī)則
? ? ? RuleDto rule =? this.ruleMapper.getVaildRuleOne();
? ? ? if(!Optional.ofNullable(rule).isPresent()){
? ? ? ? response.setMsg(ErrorResultEnum.NO_PRIZE_RULE.getMsg());
? ? ? ? response.setCode(ErrorResultEnum.NO_PRIZE_RULE.getCode());
? ? ? ? return response;
? ? ? }
? ? ? rule.setUserFriendsId(userFriendsId);
? ? ? rule.setUserId(userId);
? ? ? //? 查詢中獎(jiǎng)紀(jì)錄
? ? ? WinnerInfo winnerInfo = this.winnerInfoMapper.findWinnerInfoByFrindsId(userFriendsId);
? ? ? LOG.info("查詢中獎(jiǎng)紀(jì)錄:{}",winnerInfo);
? ? ? if(Optional.ofNullable(winnerInfo).isPresent()){
? ? ? ? String couponsCode = winnerInfo.getCouponsCode();
? ? ? ? if(StringUtils.isEmpty(couponsCode)){
? ? ? ? ? ? response.setMsg(ErrorResultEnum.NO_HIT_PRIZE.getMsg());
? ? ? ? ? ? response.setCode(ErrorResultEnum.NO_HIT_PRIZE.getCode());
? ? ? ? }else{
? ? ? ? ? ? response.setMsg(ErrorResultEnum.HIT_PRIZE.getMsg().replace("XXXX",couponsCode));
? ? ? ? ? ? response.setCode(ErrorResultEnum.HIT_PRIZE.getCode());
? ? ? ? }
? ? ? ? return response;
? ? ? }
//? ? 1.總獎(jiǎng)品校驗(yàn)
? ? ? checkTotalPrize.setSuccessor(checkFristHitPrize);
? ? ? // 2.首次必中校驗(yàn)
? ? ? checkFristHitPrize.setSuccessor(checkMaxHitTime);
//? ? 3.每人最多中獎(jiǎng)校驗(yàn)
? ? ? checkMaxHitTime.setSuccessor(checkHitRule);
? ? ? return checkTotalPrize.handlerRequest(rule);
? }
}