Композиция через интерфейс в Java
Композиция становится гибче, если поле имеет тип интерфейса. Сначала опишем интерфейс для печати текста:
interface Printer {
void print(String text);
}
Теперь сделаем обычную реализацию этого интерфейса:
class ConsolePrinter implements Printer {
@Override
public void print(String text) {
System.out.println(text);
}
}
Класс Post будет хранить поле типа
Printer. Ему не важно, какой именно класс
реализует этот интерфейс:
class Post {
private String title;
private Printer printer;
Post(String title, Printer printer) {
this.title = title;
this.printer = printer;
}
}
Добавим метод, который передает вывод объекту
из поля printer:
void printTitle() {
printer.print(title);
}
Создадим реализацию интерфейса и передадим ее в запись:
Printer printer = new ConsolePrinter();
Post post = new Post("News", printer);
post.printTitle();
Сделайте интерфейс EmployeePrinter с методом
печати строки.
Сделайте класс Employee, который хранит
EmployeePrinter в поле и вызывает его из метода
печати имени.