當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring中策略模式实现方法
生活随笔
收集整理的這篇文章主要介紹了
Spring中策略模式实现方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、定義
在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式。在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行算法。由于spring中我們需要注冊對象,不能通過直接通過 **new** 來創建策略實現類,需要使用工廠模式來獲取bean對象
二、實現方法
1.策略模式接口
public interface StrangeService {int executeStrange(int id, double credit);}2.定義策略模式的實現類
StrangeActivityAddServiceImpl和、StrangeActivitySubServiceImpl
StrangeActivityAddServiceImpl
@Service @Slf4j public class StrangeActivityAddServiceImpl implements StrangeService{@Autowiredprivate ActivityMapper activityMapper;@Overridepublic int executeStrange(int id, double credit) {log.info("傳入參數:id=[{}],credit=[{}]",id,credit);Activity activity=activityMapper.selectByPrimaryKey(id);activity.setCredit(activity.getCredit()+credit);int res=activityMapper.updateByPrimaryKeySelective(activity);System.out.println("增加積分策略結果:"+res);return res;} }StrangeActivitySubServiceImpl
@Service @Slf4j public class StrangeActivitySubServiceImpl implements StrangeService{@Autowiredprivate ActivityMapper activityMapper;@Overridepublic int executeStrange(int id, double credit) {log.info("傳入參數:id=[{}],credit=[{}]",id,credit);Activity activity=activityMapper.selectByPrimaryKey(id);activity.setCredit(activity.getCredit()-credit);int res=activityMapper.updateByPrimaryKeySelective(activity);System.out.println("增加積分策略結果:"+res);return res;} }3.策略模式上下文
用于獲取注入的策略實現類的bean對象
(1)通過ConcurrentHashMap的形式獲取注入的對象
@Service public class StrangeContext {@Autowiredprivate final Map<String, StrangeService> map = new ConcurrentHashMap<>();/*** 根據服務實現類名稱獲取對應的服務* @param serviceName* @return*/public StrangeService strangeService(String serviceName) {StrangeService strangeService = map.get(serviceName);if (strangeService == null) {throw new RuntimeException("未定義此策略實現類!");}return strangeService;}}(2)通過SpringContextHolder重寫ApplicationContextAware獲取上下文對象獲取指定bean
StrangeService strangeService=SpringContextHolder.getBean(StrangeActivityConstant.STRANGE_CREDIT_ADD_SERVICE,StrangeActivityAddServiceImpl.class); strangeService.executeStrange(1,1);4.策略模式實現類常量名
public interface StrangeActivityConstant {String STRANGE_CREDIT_ADD_SERVICE = "strangeActivityAddServiceImpl";String STRANGE_CREDIT_MULTIPLY_SERVICE = "strangeActivityMultiServiceImpl";String STRANGE_CREDIT_SUBTRACT_SERVICE = "strangeActivitySubServiceImpl"; }5.使用方式
在spring中注入上下文StrangeContext對象,然后執行方法獲取currentHashMap中策略實現類Impl的bean對象,再調用策略實現類Impl的具體實現方法
@Autowired private StrangeContext strangeContext;@RequestMapping("/test15") public void testStrangePattern(){//為活動id=1的活動增加積分 strangeContext.strangeService(StrangeActivityConstant.STRANGE_CREDIT_ADD_SERVICE).executeStrange(1,9);//為活動id=3的活動減去積分 strangeContext.strangeService(StrangeActivityConstant.STRANGE_CREDIT_SUBTRACT_SERVICE).executeStrange(3,1); }?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Spring中策略模式实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ThreadLocal原理
- 下一篇: EasyExcel实现文件读取、导出、上