日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring中策略模式实现方法

發布時間:2024/9/30 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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中策略模式实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。