Selaa lähdekoodia

排序策略选择enum

wangyunpeng 10 kuukautta sitten
vanhempi
commit
736e26979f

+ 33 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/common/enums/RankStrategyEnum.java

@@ -0,0 +1,33 @@
+package com.tzld.longarticle.recommend.server.common.enums;
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+@Getter
+public enum RankStrategyEnum {
+    ArticleRankV2("ArticleRankV2", "ArticleRankV2", "rankV2Strategy"),
+    ArticleRankV3("ArticleRankV3", "ArticleRankV3", "rankV3Strategy"),
+
+    default_strategy("ArticleRankV1", "默认策略", "defaultRankStrategy"),
+    ;
+
+    private final String strategy;
+    private final String description;
+    private final String taskExecutorName;
+
+    RankStrategyEnum(String strategy, String description, String taskExecutorName) {
+        this.strategy = strategy;
+        this.description = description;
+        this.taskExecutorName = taskExecutorName;
+    }
+
+    public static RankStrategyEnum from(String strategy) {
+        for (RankStrategyEnum statusEnum : RankStrategyEnum.values()) {
+            if (Objects.equals(statusEnum.strategy, strategy)) {
+                return statusEnum;
+            }
+        }
+        return default_strategy;
+    }
+}

+ 4 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/ServiceBeanFactory.java

@@ -20,4 +20,8 @@ public class ServiceBeanFactory implements ApplicationContextAware {
     public static <T> T getBean(Class<T> clazz) {
     public static <T> T getBean(Class<T> clazz) {
         return applicationContext.getBean(clazz);
         return applicationContext.getBean(clazz);
     }
     }
+
+    public static Object getBeanByName(String name){
+        return applicationContext.getBean(name);
+    }
 }
 }

+ 3 - 12
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/rank/RankService.java

@@ -1,10 +1,8 @@
 package com.tzld.longarticle.recommend.server.service.rank;
 package com.tzld.longarticle.recommend.server.service.rank;
 
 
 
 
+import com.tzld.longarticle.recommend.server.common.enums.RankStrategyEnum;
 import com.tzld.longarticle.recommend.server.service.ServiceBeanFactory;
 import com.tzld.longarticle.recommend.server.service.ServiceBeanFactory;
-import com.tzld.longarticle.recommend.server.service.rank.strategy.DefaultRankStrategy;
-import com.tzld.longarticle.recommend.server.service.rank.strategy.RankV2Strategy;
-import com.tzld.longarticle.recommend.server.service.rank.strategy.RankV3Strategy;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -21,15 +19,8 @@ public class RankService {
     }
     }
 
 
     private RankStrategy getRankStrategy(RankParam param) {
     private RankStrategy getRankStrategy(RankParam param) {
-        switch (param.getStrategy()) {
-            case "ArticleRankV2":
-                return ServiceBeanFactory.getBean(RankV2Strategy.class);
-            case "ArticleRankV3":
-                return ServiceBeanFactory.getBean(RankV3Strategy.class);
-            default:
-                return ServiceBeanFactory.getBean(DefaultRankStrategy.class);
-        }
+        RankStrategyEnum rankStrategyEnum = RankStrategyEnum.from(param.getStrategy());
+        return (RankStrategy) ServiceBeanFactory.getBeanByName(rankStrategyEnum.getTaskExecutorName());
     }
     }
 
 
-
 }
 }