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