Вы должны сделать последнее - это отделяет менеджера от его делегата. Чтобы сделать разделение правильно, вы должны создать интерфейс, который определяет поведение, которое ожидает менеджер, а затем предоставить реализацию посредством инверсии управления / внедрения зависимостей. Это позволит вам протестировать менеджер и его рабочий класс (я назвал его делегатом, но это может быть не так) в изоляции.
РЕДАКТИРОВАТЬ - этот ответ предполагает Java, потому что вы упомянули сервлет.
У вас есть класс менеджера, в нем вы ожидаете интерфейс
class Manager {
Worker worker;
Manager(Worker worker) {
this.worker = workder
}
}
Рабочий - это интерфейс. Он определяет поведение, но не реализацию
interface Worker {
public void doesSomething(); //method definition but no implementation
}
Теперь вам нужно создать реализацию
class WorkerImpl implements Worker {
// must define a doesSomething() implementation
}
Менеджер просто знает, что получает какого-то работника. Вы можете предоставить любой класс, который реализует интерфейс. Это разъединяет - Менеджер не привязан к какой-либо конкретной реализации, он связан только с поведением работника.