С паттерном «Строитель» (хотя лично я никогда его так не называю — для меня он Builder) знакомы все, кто хоть немного продвинулся в изучении уроков на startandroid или других подобных (Александр  Климов, например). Лично я впервые с ним столкнулся в незапамятно далеких временах, когда изучал AlertDialog. Думаю, не я один такой.

Ладно, перейдя от знакомства с билдером к его непосредственному применению, мы перенесемся на некоторое время вперед. Ниже я покажу код, как я использую этот паттерн при вызове авторизации на удаленном сервере.

Итак, мой код изначально выглядел следующим образом

Писал я его быстро и на коленке. Сразу же бросаются в глаза следующие недостатки,
— Весь вызов был описан во фрагменте, и если мне надо сделать авторизацию в другом месте, то я бы столкнулся с методом копипаста, или в итоге (что в моем случае вероятнее) я бы вернулся к проблеме и переписал бы как надо.
— Есть постоянные переменные clientId и проч., которые необходимо передавать в вызов функции Retrofit (возможно, я просто сам не понял еще как константы можно передавать), их тоже придется постоянно здесь упоминать.
— Если в процедуре авторизации что-то изменится (добавится, к примеру, новое поле), что будет выглядеть каким-то нагромождением параметров в функции.

В общем-то, ничего особенного в этих размышлениях нет, зачем же использовать билдер? Можно обозначить класс и методы, в котором будут обрабатываться данные и выводиться результат? Верно, можно. Использование паттернов проектирования — вещь вполне себе добровольная. Хочешь — используй. Я, например, хочу.

Вот как выглядит класс через 5 минут бодрого тыканья по клавишам

Смотрите, константы стали final параметрами, и мешаться мне больше не будут. Их назначение идет через flavor, а получаю я их соответственно через параметры класса BuildConfig.

Сам же вызов авторизации в фрагменте стал выглядеть следующим образом

Паттерн помог сделать код более читабельным, он может вызываться из любого места в приложении и при изменении вызова самой авторизации мне придется внести изменения только в одном месте.