java設計模式之策略模式在促銷活動場景中的使用案例
概念
- 策略模式是一種行為設計模式
- 就是將一個東西(入?yún)ⅲ?/li>
- 傳到分發(fā)中心(上下文或環(huán)境類)
- 分發(fā)中心根據(jù)條件的不同選擇不同的處理方式(策略)
- 每一個方式(具體的實現(xiàn)類)對應相應的處理方法(類中的方法)(可以抽出公共的接口或抽象類)
- 東西通過相應的處理方法
- 輸出最終的產(chǎn)品(出參)。
使用方式
- 定義一個公共接口或者抽象類
- 每個方式(策略)去實現(xiàn)該接口或者抽象類
- 定義一個環(huán)境類去調用不同的策略
業(yè)務場景
促銷活動
一家百貨公司在定年度的促銷活動。針對不同的節(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)境類去調用不同的策略
@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(); ? ? ? ? } ? ? } ?}
調用
@Autowired ?FestivalStrategyUseService festivalStrategyUseService; ? ?@Test ?public void test3(){ ? //第一種 ? ? ?festivalStrategyUseService.showFestivalAndContext(FestivalEnum.CHINESE_NEW_YEAR); ? ? ?//第二種 ? ? ?festivalStrategyUseService.showFestivalAndContext("NewYearStrategy"); ?}
結果
現(xiàn)在正值春節(jié)佳節(jié)
春節(jié)活動:買一送一
以上就是java設計模式之策略模式在促銷活動場景中案例詳解的詳細內容,更多關于java 設策略模式的資料請關注腳本之家其它相關文章!
相關文章
Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調用方式
這篇文章主要介紹了Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決
這篇文章主要介紹了SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果
這篇文章主要為大家詳細介紹了Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06Java 如何繞過迭代器遍歷時的數(shù)據(jù)修改異常
這篇文章主要介紹了Java 繞過迭代器遍歷時的數(shù)據(jù)修改異常的方法,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下2021-02-02