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)文章
Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調(diào)用方式
這篇文章主要介紹了Java多線程之 FutureTask:帶有返回值的函數(shù)定義和調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決
這篇文章主要介紹了SpringBoot靜態(tài)資源CSS等修改后再運行無效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果
這篇文章主要為大家詳細(xì)介紹了Java swing實現(xiàn)音樂播放器桌面歌詞字體變色效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-06-06
Java 如何繞過迭代器遍歷時的數(shù)據(jù)修改異常
這篇文章主要介紹了Java 繞過迭代器遍歷時的數(shù)據(jù)修改異常的方法,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-02-02

