gpt4 book ai didi

java - 没有 if-else 的 Spring 限定符

转载 作者:行者123 更新时间:2023-12-02 12:01:31 25 4
gpt4 key购买 nike

我使用 Spring 框架。我想提供创建文件的服务。我有两种类型的存档。我想知道另一种不使用 if-else 语句的方法。

界面

public interface Archive {
public String makeArchive();
}

实现1

@Component
public class ArchiveRAR implements Archive {
@Override
public String makeArchive() {
return "I made archive RAR.";
}
}

实现2

@Component
public class ArchiveZIP implements Archive {
@Override
public String makeArchive() {
return "I made archive ZIP.";
}
}

服务

@Service
public class RunnerApp implements CommandLineRunner {

@Autowired
@Qualifier("archiveRAR")
Archive archiveRAR;

@Autowired
@Qualifier("archiveZIP")
Archive archiveZIP;

@Override
public void run(String... strings) throws Exception {

Report report = new Report("ZIP");
//HERE
if ("RAR".equals(report.getType())) {
System.out.println(archiveRAR.makeArchive());
} else if ("ZIP".equals(report.getType())) {
System.out.println(archiveZIP.makeArchive());
}

}
}

主应用

@SpringBootApplication
public class MainApp {
public static void main(String[] args) throws Exception {
SpringApplication.run(MainApp.class, args);
}
}

谢谢。

最佳答案

我建议您在这里使用工厂模式而不是 if-else 语句:

@Component
public class ArchiveFactory {
@Autowired
private Map<String, Archive> archives;

public Archive getArhive(String archiveType) {
return archives.get(archiveType);
}
}

这样你的主要方法将是:

@Service
public class RunnerApp implements CommandLineRunner {

@Autowired
private ArchiveFactory archiveFactory;

@Override
public void run(String... strings) throws Exception {

Report report = new Report("ZIP");
Archive archive = archiveFactory.get(report.getType());
System.out.println(archive.makeArchive());
}
}

当然你还需要定义类型为 Map<String, Archive> 的 bean .

关于java - 没有 if-else 的 Spring 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com