java設(shè)計模式之策略模式在促銷活動場景中的使用案例
概念
- 策略模式是一種行為設(shè)計模式

- 就是將一個東西(入?yún)ⅲ?/li>
- 傳到分發(fā)中心(上下文或環(huán)境類)
- 分發(fā)中心根據(jù)條件的不同選擇不同的處理方式(策略)
- 每一個方式(具體的實現(xiàn)類)對應(yīng)相應(yīng)的處理方法(類中的方法)(可以抽出公共的接口或抽象類)
- 東西通過相應(yīng)的處理方法
- 輸出最終的產(chǎn)品(出參)。
使用方式
- 定義一個公共接口或者抽象類
- 每個方式(策略)去實現(xiàn)該接口或者抽象類
- 定義一個環(huán)境類去調(diào)用不同的策略
業(yè)務(wù)場景
促銷活動
一家百貨公司在定年度的促銷活動。針對不同的節(jié)日(春節(jié)、中秋節(jié)、圣誕節(jié))推出不同的促銷活動,由促銷員將促銷活動展示給客戶。
代碼實現(xiàn)
定義一個公共接口或者抽象類
public interface FestivalStrategy {
FestivalEnum getFestivalEnum();
void show();
}每個方式(策略)去實現(xiàn)該接口或者抽象類
@Service
?public class NewYearStrategy implements FestivalStrategy{
? ? ?@Override
? ? ?public FestivalEnum getFestivalEnum() {
? ? ? ? ?return FestivalEnum.CHINESE_NEW_YEAR;
? ? }
? ? ?@Override
? ? ?public void show() {
? ? ? ? ?System.out.println("春節(jié)活動");
? ? }
?}@Service
?public class MidAutumnStrategy implements FestivalStrategy {
?
? ? ?@Override
? ? ?public FestivalEnum getFestivalEnum() {
? ? ? ? ?return FestivalEnum.MID_AUTUMN;
? ? }
?
? ? ?@Override
? ? ?public void show() {
? ? ? ? ?System.out.println("中秋活動");
? ? }
?}@Service
?public class ChristmasStrategy implements FestivalStrategy {
?
? ? ?@Override
? ? ?public FestivalEnum getFestivalEnum() {
? ? ? ? ?return FestivalEnum.CHRISTMAS;
? ? }
?
? ? ?@Override
? ? ?public void show() {
? ? ? ? ?System.out.println("圣誕活動");
? ? }
?}定義一個環(huán)境類去調(diào)用不同的策略
@Component
?public class FestivalStrategyUseService implements ApplicationContextAware {
? ? ?private Map<FestivalEnum,FestivalStrategy> ?festivalStrategyMap =new HashMap<>();
? ? ?@Override
? ? ?public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
? ? ? ? ?Map<String, FestivalStrategy> tmepMap = applicationContext.getBeansOfType(FestivalStrategy.class);
? ? ? ? ?tmepMap.values().forEach(strategyService -> festivalStrategyMap.put(strategyService.getFestivalEnum(), strategyService));
? ? }
? ? ?public void showFestivalAndContext(FestivalEnum festivalEnum) {
? ? ? ? ?FestivalStrategy festivalStrategy = festivalStrategyMap.get(festivalEnum);
? ? ? ? ?if (festivalStrategy != null) {
? ? ? ? ? ? ?System.out.println("現(xiàn)在正值"+festivalStrategy.getFestivalEnum().getName()+"佳節(jié)");
? ? ? ? ? ? ?festivalStrategy.show();
? ? ? ? }
? ? }
?}或者
@Component
?public class FestivalStrategyUseService {
? @Autowired
? ? ?private Map<String,FestivalStrategy> ?festivalStrategyMap;
? ? ?public void showFestivalAndContext(String festivalEnum) {
? ? ? ? ?FestivalStrategy festivalStrategy = festivalStrategyMap.get(festivalEnum);
? ? ? ? ?if (festivalStrategy != null) {
? ? ? ? ? ? ?System.out.println("現(xiàn)在正值"+festivalStrategy.getFestivalEnum().getName()+"佳節(jié)");
? ? ? ? ? ? ?festivalStrategy.show();
? ? ? ? }
? ? }
?}調(diào)用
@Autowired
?FestivalStrategyUseService festivalStrategyUseService;
?
?@Test
?public void test3(){
? //第一種
? ? ?festivalStrategyUseService.showFestivalAndContext(FestivalEnum.CHINESE_NEW_YEAR);
? ? ?//第二種
? ? ?festivalStrategyUseService.showFestivalAndContext("NewYearStrategy");
?}結(jié)果
現(xiàn)在正值春節(jié)佳節(jié)
春節(jié)活動:買一送一
以上就是java設(shè)計模式之策略模式在促銷活動場景中案例詳解的詳細(xì)內(nèi)容,更多關(guān)于java 設(shè)策略模式的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis-Plus默認(rèn)主鍵策略導(dǎo)致自動生成19位長度主鍵id的坑
這篇文章主要介紹了Mybatis-Plus默認(rèn)主鍵策略導(dǎo)致自動生成19位長度主鍵id的坑,本文一步步給大家分享解決方法,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
Mybatis注解實現(xiàn)多數(shù)據(jù)源讀寫分離詳解
這篇文章主要給大家介紹了關(guān)于Mybatis注解實現(xiàn)多數(shù)據(jù)源讀寫分離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java微信公眾平臺開發(fā)(14) 微信web開發(fā)者工具使用
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第十四步,微信web開發(fā)者工具的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
spring項目自定義全局響應(yīng)處理器統(tǒng)一處理響應(yīng)結(jié)果的實現(xiàn)步驟
本文詳細(xì)描述了如何通過@ControllerAdvice和ResponseBodyAdvice在SpringMVC項目中創(chuàng)建自定義響應(yīng)處理器,以及如何使用Wrapper類包裝和標(biāo)準(zhǔn)化返回結(jié)果,感興趣的朋友跟隨小編一起看看吧2025-01-01
Java與Oracle實現(xiàn)事務(wù)(JDBC事務(wù))實例詳解
這篇文章主要介紹了Java與Oracle實現(xiàn)事務(wù)(JDBC事務(wù))實例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
基于自定義BufferedReader中的read和readLine方法
下面小編就為大家分享一篇基于自定義BufferedReader中的read和readLine方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12

