Параметры Kotlin по умолчанию избавили нас от множества перегрузок конструктора, но наличие конструктора с множеством необязательных параметров (особенно того же типа) может снизить читаемость и удобство использования вашего кода. Мы можем лучше :)

Шаблон Builder - это именно то, что может обеспечить удобство чтения и возможность использования нескольких произвольных параметров или вложенных объектов в качестве параметров для создания объекта.

Процесс создания объекта является общим, поэтому его можно использовать для создания различных представлений одного и того же объекта. Этот тип шаблона проектирования относится к шаблонам создания, поскольку он обеспечивает один из способов создания объекта. Давайте теперь погрузимся в реализацию.

Ознакомьтесь с другими шаблонами проектирования в Kotlin на моем Github - https://github.com/AnastasiaRainMaker/Kotlin-Design-Pattern-Examples/tree/master/app/src/main/java/com/heb/design_pattern_practice

План игры

Начнем с краткого плана игры. Первым шагом будет создание класса POJO (простой старый объект Java), который будет содержать реализацию класса Builder внутри него. Сам объектный класс будет иметь поля частных свойств с назначенными значениями по умолчанию. Реализация построителя не требует наличия параметров по умолчанию, просто обеспечивает нулевую безопасность в вашем коде. Класс POJO примет экземпляр Builder в качестве параметра конструктора.

Через секунду в приведенном ниже примере вы увидите, что экземпляр Vacation принимает экземпляр класса VacationBuilder при создании.

Для самого класса построителя он также будет содержать сопоставление с полями POJO, чтобы им можно было назначить объект POJO при создании позже.

Итак, давайте взглянем на пример кода.

Как вы можете заметить в примере, Vacation - это класс POJO, о котором мы говорили выше, а VacationBuilder - это реализация шаблона Builder. Все методы, которые будут связаны, возвращают тип Builder - VacationBuilder. И метод build () возвращает наш объект POJO - Vacation.

Предупреждение

Я видел другие реализации, в которых используется apply {} Kotlin, и я хочу попросить вас не делать этого в этом случае. Поскольку apply {} и другие функции более высокого порядка создают анонимный внутренний класс под капотом - вы хотите использовать их экономно. Таким образом, возврат самого себя (this) в связанных вызовах позволит нам получить этот красивый цепной поток без накладных расходов, которые может вызвать apply {}.

Подключим

Реализовав POJO и Builder, мы готовы начать его использовать. Как показано ниже, мы получаем наш объект Vacation . Мы получаем ссылку на VacationBuilder через класс Vacation. После создания его экземпляра мы можем связать все необходимые вызовы для установки желаемых параметров. И, наконец, «построим» наш объект.

И вуаля, мы можем создавать сложные объекты с красивым выразительным кодом с помощью паттерна Builder. Этот паттерн - один из основных творческих паттернов, и я считаю, что каждый должен его понимать и использовать простоту, которую он обеспечивает, когда в этом возникает необходимость. Многие библиотеки основного потока используют его для создания объектов - Retrofit, Android sdk (например, StringBuilder) и т. Д.