Назовите по два паттерна поведенческих, порождающих и структурных
Что проверяют
Помните ли вы классификацию и, что важнее, узнаёте ли паттерны в том, чем пользуетесь каждый день. Ответ ценится, когда на каждый есть пример из платформы или библиотеки, а не только определение из книги.
Как отвечать
Порождающие, про создание объектов:
Singleton: один экземпляр на процесс. Так обычно живут база и сетевой клиент, но создаёт их контейнер внедрения зависимостей, а не статическое поле с ручной блокировкой;Builder: пошаговая сборка объекта с множеством необязательных параметров. Виден в построителях уведомлений, диалогов и клиента HTTP.
Структурные, про композицию:
Adapter: приводит один интерфейс к другому. Обёртка над чужой библиотекой, чтобы её типы не протекали в остальной код;Decorator: оборачивает объект и добавляет поведение, сохраняя интерфейс. В платформе так устроенContextWrapper, а в библиотеках похожим образом ведут себя обёртки над потоками.
Поведенческие, про взаимодействие:
Observer: подписка на изменения. Ровно это делаютLiveDataиFlow, на них держится обновление экрана вслед за данными;Strategy: взаимозаменяемые алгоритмы за общим интерфейсом. Разные менеджеры разметки у списка это она.
Хорошо закончить фразой про цену: паттерн оправдан, когда снимает уже существующую боль, и вредит, когда вводится заранее на всякий случай.
Где спотыкаются
Путают фабричный метод и абстрактную фабрику. Первый это метод, который подклассы переопределяют, чтобы подменить создаваемый тип; вторая это объект, создающий согласованное семейство продуктов.
Второе: называют Singleton любимым паттерном. Это глобальное состояние, скрытая зависимость и боль в тестах, а на мобильной платформе процесс могут убить в любой момент, и состояние в синглтоне просто пропадёт.
Третье: тащат в ответ архитектурные подходы вроде MVVM или MVI. Это не паттерны из той классификации, о которой спрашивают, и смешивание показывает, что категории в голове не разделены.