Используйте адаптер, если у вас есть интерфейс, который вы не можете изменить, но который вам нужно использовать. Смотрите на это так, как будто вы новичок в офисе, и вы не можете заставить седых следовать вашим правилам - вы должны адаптироваться к их правилам. Вот реальный пример из реального проекта, над которым я когда-то работал, где пользовательский интерфейс задан.
У вас есть приложение, которое считывает все строки файла в структуру данных List и отображает их в сетке (назовем базовый интерфейс хранилища данных IDataStore). Пользователь может перемещаться по этим данным, нажимая кнопки «Первая страница», «Предыдущая страница», «Следующая страница», «Последняя страница». Все нормально работает.
Теперь приложение нужно использовать с производственными журналами, которые слишком велики для чтения в память, но пользователю все равно нужно перемещаться по ним! Одним из решений было бы реализовать кэш, в котором хранятся первая, следующая, предыдущая и последняя страницы. Мы хотим, чтобы когда пользователь нажимал «Следующая страница», мы возвращали страницу из кеша и обновляли кеш; когда они нажимают последнюю страницу, мы возвращаем последнюю страницу из кеша. На заднем плане у нас есть файловый поток, делающий всю магию. Таким образом, у нас будет только четыре страницы в памяти, а не весь файл.
Вы можете использовать адаптер, чтобы добавить эту новую функцию кеширования в ваше приложение, чтобы пользователь этого не заметил. Мы расширяем текущий IDataStore и называем его CacheDataStore. Если файл для загрузки большой, мы используем CacheDataStore. Когда мы делаем запрос для первой, следующей, предыдущей и последней страниц, информация направляется в наш кэш.
И кто знает, завтра начальник хочет начать читать файлы из таблицы базы данных. Все, что вы делаете, - это расширяете IDataStore до SQLDataStore, как вы делали для Cache, настраивая соединение в фоновом режиме. Когда они нажимают «Следующая страница», вы генерируете необходимый sql-запрос для получения следующих нескольких сотен строк из базы данных.
По сути, оригинальный интерфейс приложения не изменился. Мы просто адаптировали современные и интересные функции для работы, сохранив при этом устаревший интерфейс.