Найти в Дзене

Паттерн "Мост" в андроиде

Паттерн "Мост" — это метод организации кода, который помогает разделить "что делать" от "как делать". Иначе говоря, этот паттерн про разделение абстракции и реализации. Пример в Android Это пример из реальной жизни и лет пять назад такое можно было встретить в продовом коде (я видела). Допустим, у нас есть разные фрагменты, которые должны передавать данные в активити. Мы как раз можем использовать паттерн "Мост". Код находится здесь: https://github.com/Ladgertha/patterns/commit/5499e8481ddfcd0064379daa1de7555f819f94c8 Интерфейс для передачи данных Активити реализует этот интерфейс Фрагменты используют этот интерфейс Теперь, независимо от того, какой фрагмент передает данные, активити всегда будет знать, как их получить и обработать. При этом сама активити ничего не знает про фрагменты, их количество и реализацию. Может возникнуть вопрос, а что происходит в методе onAttach? Этот метод вызывается, когда фрагмент присоединяется к активити. В моём примере мы проверяем реализует ли активит
Оглавление

Паттерн "Мост" — это метод организации кода, который помогает разделить "что делать" от "как делать". Иначе говоря, этот паттерн про разделение абстракции и реализации.

Пример в Android

Это пример из реальной жизни и лет пять назад такое можно было встретить в продовом коде (я видела). Допустим, у нас есть разные фрагменты, которые должны передавать данные в активити. Мы как раз можем использовать паттерн "Мост".

Код находится здесь: https://github.com/Ladgertha/patterns/commit/5499e8481ddfcd0064379daa1de7555f819f94c8

Интерфейс для передачи данных

Активити реализует этот интерфейс

-2

Фрагменты используют этот интерфейс

-3

Теперь, независимо от того, какой фрагмент передает данные, активити всегда будет знать, как их получить и обработать. При этом сама активити ничего не знает про фрагменты, их количество и реализацию.

Может возникнуть вопрос, а что происходит в методе onAttach? Этот метод вызывается, когда фрагмент присоединяется к активити. В моём примере мы проверяем реализует ли активити, к которому присоединился фрагмент, интерфейс CatDataTransmitter. Если это так, то мы сохраняем ссылку на активити в переменной transmitter. Это делается для того, чтобы позже, когда будет необходимо передать данные, фрагмент мог это сделать, вызвав метод transmit через эту сохраненную ссылку.

Плюсы паттерна:

  • Разделение интерфейса и реализации.
  • Принцип открытости/закрытости: легко добавить новые абстракции или реализации.
  • Принцип подстановки Барбары Лисков: клиентский код может работать с любой абстракцией или реализацией.

Минусы

  • Усложнение кода из-за разделения
  • Сложно понять, когда этот паттерн использовать.
-4

Дубль статей в телеграмме — https://t.me/android_junior

Мои заметки в телеграмме — https://t.me/android_junior_notes