我正在写一些看起来像这样的东西(当然它比这个示例复杂一点):
public class DoOnAll {
private List<IActionPerformer> actionPerformers;
public DoOnAll(List<IActionPerformer> actionPerformers) {
this.actionPerformers = actionPerformers;
}
public void callFromSomeWhere(String path) {
File f = new File(path);
List<File> list = Arrays.asList(f.listFiles());
for (File file : list) {
for (IActionPerformer action : actionPerformers) {
action.perform(file);
}
}
}
}
public interface IActionPerformer {
public void perform(File file);
}
public class SomePerformer implements IActionPerformer {
public void perform(File file) {
if (getFileType(file) = ".txt") {
doSomething
}
}
}
我有两个问题:
我是否应该将
SomePerformer
中的条件移动到另一个方法,例如boolean accept(File file)
,并将此方法声明添加到接口(interface)中? 如果是这样,我将如何“收集”DoOnAll
中所有已接受的类?只是遍历actionPerformers
列表并将所有已接受的添加到另一个列表,然后遍历已接受的列表并对它们执行.perform
吗?还是方法论中有其他常用的方法?有哪些方法可以将
actionPerformrs
列表注入(inject)到类中? 我想编写独立的实现并在一个文件中定义,比如 xml 文件,将哪些注入(inject)到列表中。
最佳答案
在回答你的第二个问题时,你应该查看 dependency injection . Java 有一些很好的框架可以为您做这件事,例如:
Spring 尤其允许您在 XML 文件中定义应用程序的组件和依赖项。有关示例,请参见:
最后一个链接有一个关于构造函数注入(inject)的小节:创建 java 对象,并根据您的类 DoOnAll
要求为其构造函数提供依赖项。
关于java - "Inject"接口(interface)实现成java类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893580/