2 июл. 2015 г.

Делегирование.

Еще один вид отношений, не поддерживаемый в Java напрямую, называется делегированием (delegation). Он занимает промежуточное положение между наследованием и композицией: экземпляр существующего класса включается в создаваемый класс (как при композиции), но в то же время все или некоторые методы встроенного объекта становятся доступными в новом классе (как при наследовании). Очень часто такие виды отношений используются при построении графического интерфейса, например для реализации модели MVC библиотека Swing использует делегирование.

А сейчас рассмотрим на простом примере что же это за зверь такой – делегирование.

Например, класс SpaceShipControls имитирует модуль управления космическим кораблем. А Для построения космического корабля можно воспользоваться наследованием в классе SpaceShip.

SS001

SS002

Однако космический корабль не может рассматриваться как частный случай своего управляющего модуля — несмотря на то, что ему, к примеру, можно приказать двигаться вперед (forward()). Точнее сказать, что SpaceShip содержит SpaceShipControls, и в то же время все методы последнего предоставляются классом SpaceShip. Проблема решается при помощи делегирования:

SS003

Как видите, вызовы методов переадресуются встроенному объекту controls, а интерфейс остается таким же, как и при наследовании. С другой стороны, делегирование позволяет лучше управлять происходящим, потому что вы можете ограничиться небольшим подмножеством методов встроенного объекта.

16 комментариев:

  1. Ответы
    1. Пожалуйста, хоть и через два года :)

      Удалить
    2. Пожалуйста из 2021 года. Кто бы мог подумать, что через шесть лет с миром будет такая фигня, как сейчас.

      Удалить
  2. Шикарное объяснение! Спасибо огромное за Ваше время и труд!

    ОтветитьУдалить
    Ответы
    1. Еще скажите что это ваше обьяснение хд мне квжется что это брюс экель 😁

      Удалить
    2. Конечно он самый. Что мне было изобретать велосипед когда на спейсшипе можно было проехать :)

      Удалить
  3. круто рассказано, но вникаешь всё-равно долго Х_Х

    ОтветитьУдалить
  4. Зато можно получать удовольствие от освоения нового

    ОтветитьУдалить
  5. Из данного примера не понятно, чем композиция отличается от делегирования

    ОтветитьУдалить
  6. Ответы
    1. Но как видно народ книги не очень то читает. Сейчас все проще в интернете найти.

      Удалить
    2. Читаем, читаем) Эккеля как раз. Но сторонние источники, особенно такие объяснябельные, скажем так... разукрашивают серость печатного текста)

      Удалить