— Привет, Амиго! А вот и снова я. Хочу рассказать тебе еще об одном взгляде на интерфейсы. Понимаешь, класс – это, чаще всего модель какого-то конкретного объекта. Интерфейс же больше соответствует не объектам, а их способностям или ролям.

Например, такие вещи, как машина, велосипед, мотоцикл и колесо лучше всего представить в виде классов и объектов. А такие их способности как «могу ездить», «могу перевозить людей», «могу стоять» — лучше представить в виде интерфейсов. Смотри пример:
Код на Java | Описание |
---|---|
|
— соответствует способности передвигаться. |
|
— соответствует способности управляться водителем. |
|
— соответствует способности перевозить грузы. |
|
— класс «колесо». Обладает способностью передвигаться. |
|
— класс «машина». Обладает способностью передвигаться, управляться человеком и перевозить грузы. |
|
— класс «скейтборд». Обладает способностью передвигаться и управляться человеком. |
Интерфейсы сильно упрощают жизнь программиста. Очень часто в программе тысячи объектов, сотни классов и всего пара десятков интерфейсов – ролей. Ролей мало, а их комбинаций – классов – очень много.
Весь смысл в том, что тебе не нужно писать код для взаимодействия со всеми классами. Тебе достаточно взаимодействовать с их ролями (интерфейсами).
Представь, что ты – робот-строитель и у тебя в подчинении есть десятки роботов, каждый из которых может иметь несколько профессий. Тебе нужно срочно достроить стену. Ты просто берешь всех роботов, у которых есть способность «строитель» и говоришь им строить стену. Тебе все равно, что это за роботы. Хоть робот-поливалка. Если он умеет строить – пусть идет строить.
Вот как это выглядело бы в коде:
Код на Java | Описание |
---|---|
|
— способность «строитель стен». Понимает команду «(по)строить стену» — имеет соответствующий метод. |
|
— роботы у которых есть эта профессия/особенность.
— для удобства я сделал классам имена на русском. Такое допускается в java, но крайне нежелательно. — поливалка не обладает способностью строить стены (не реализует интерфейс WallBuilder). |
|
— как дать им команду – построить стену? |
— Чертовски интересно. Даже и не думал, что интерфейсы – такая интересная тема.
— А то! В совокупности с полиморфизмом – это вообще бомба.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ