我使用 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/