У меня есть класс 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
?