实践Spring Boot中的工厂模式项目实战
Spring Boot中工厂模式的示例
下面展示一个在Spring Boot中应用工厂模式的例子,这里我们将创建一个简单的LanguageProcessor接口以及几个具体的语言服务实现,并通过一个工厂类来根据外部输入动态创建相应的选择语言。
定义处理器接口定义处理器接口
public interface LanguageProcessor {
void process(String languageType);
}
实现处理器接口的类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class EnglishProcessor implements LanguageProcessor{
protected Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void process(String languageType) {
logger.info("The current selection is English!");
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class ChineseProcessor implements LanguageProcessor{
protected Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void process(String languageType) {
logger.info("当前选择的是中文!");
}
}
创建工厂类
import com.example.demo.processor.LanguageProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Component
public class LanguageProcessorFactory {
private final Map<String, LanguageProcessor> processorMap = new ConcurrentHashMap<>();
@Autowired
public LanguageProcessorFactory(Map<String, LanguageProcessor> beansOfType) {
// 将所有实现了Processor接口的Bean注入到map中
this.processorMap.putAll(beansOfType);
}
public LanguageProcessor getLanguageProcessor(String type) {
return processorMap.get(type);
}
}
控制层
import com.example.demo.factory.LanguageProcessorFactory;
import com.example.demo.utils.result.ResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author YangDi
* @since 2024/3/20
*/
@RestController
@RequestMapping("/language")
public class LanguageController {
@Autowired
private LanguageProcessorFactory languageProcessorFactory;
@RequestMapping("/selectLanguage")
public ResultEntity<String> selectLanguage(@RequestParam String languageType) {
languageProcessorFactory.getLanguageProcessor(languageType).process(languageType);
return ResultEntity.success("success");
}
}