— Привет, Амиго! Сегодня я расскажу тебе, что же такое «адаптер». Надеюсь, что после его изучения ты начнешь понимать потоки ввода-вывода гораздо лучше.
Представь, что в твоей программе ты используешь два фреймворка, написанные другими программистами/компаниями. Оба фреймворка очень хорошие и используют принципы ООП: абстракцию, полиморфизм, инкапсуляцию. Они вместе практически полностью покрывают задачи твоей программы. За тобой осталось простая задача — объекты, которые создает один фреймворк нужно передать во второй. Но оба фреймворка совершенно разные и «не знают друг о друге» — т.е. не имеют общих классов. Тебе нужно как-то преобразовывать объекты одного фреймворка в объекты другого.
Эту задачу можно красиво решить, применив подход (паттерн проектирования) «адаптер»:
Код на Java | Описание |
---|---|
|
Это схематическое описание «паттерна проектирования адаптер».
Суть его в том, что класс MyClass является преобразователем (адаптером) одного интерфейса к другому. |
— А можно более конкретный пример?
— Ок. Допустим, что у каждого фреймворка есть свой уникальный интерфейс «список», вот как это может выглядеть:
Код на Java | Описание |
---|---|
|
Код из первого(Alpha) фреймворка.
AlphaList – это один из интерфейсов, для взаимодействия кода фреймворка и кода, который будет использовать этот фреймворк. |
|
AlphaListManager – класс фреймворка, метод которого createList создает объект типа AlphaList |
|
Код из второго(Beta) фреймворка.
BetaList – это один из интерфейсов, для взаимодействия кода фреймворка и кода, который будет использовать этот фреймворк. BetaSaveManager – класс фреймворка, метод которого saveList сохраняет на диск объект типа BetaList |
|
Класс «адаптер» (т.е. переходник) от интерфейса AlphaList к интерфейсу BetaList
Класс ListAdapter реализует интерфейс BetaList из второго фреймворка. Когда кто-то вызывает эти методы, код класса перевызывает методы переменной list, которая имеет тип AlphaList из первого фреймворка. Объект типа AlphaList передается в конструктор ListAdapter в момент создания Метод setSize работает по принципу: если нужно увеличить размер списка – добавим туда пустых (null) элементов. Если нужно уменьшить – удалим несколько последних. |
|
Пример использования |
— Больше всего понравился пример использования. Очень компактно и понятно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ