我有一个与A
一起使用的类List<String>
。但是此类之外的任何人都不需要知道它可以与字符串一起使用。但是,我也想提供该类List
应该使用的具体实现(通过依赖注入)。A
应该看起来像这样
public class A {
private ListFactory listFactory; //this gets injected from the outside
public A(ListFactory listFactory) {
this.listFactory = listFactory;
}
public void a() {
List<String> = listFactory.createList();
//...
}
}
呼叫者类
B
像这样public class B {
public void b() {
ListFactory factory = new ArrayListFactory(); //we want class A to use ArrayList
A a = new A(factory);
//...
}
}
ListFactory
是由ArrayListFactory
实施以创建ArrayList
的接口。精髓:
我不希望
B
在某处提到String
。而且我也不希望A
在某处提到ArrayList
。这可能吗?
ListFactory
和ArrayListFactory
的外观如何? 最佳答案
我认为这比您做的要简单:
public interface Factory {
public <T> List<T> create();
}
public class FactoryImpl implements Factory {
public <T> ArrayList<T> create() {
return new ArrayList<T>();
}
}
...
Factory f = new FactoryImpl();
List<String> strings = f.create();
...