Паттерн Builder в Kotlin#patterns
Паттерн
Builder используется для того, чтобы упростить создание объектов со сложной логикой создания или в случае наличия большого числа конструкторов.
По сути, этот правильно сконструированный Builder избавляет нас от того, чтобы думать о том, как создать объект, какой конструктор использовать, а вместо этого возвращает готовый объект или ошибку.
Этот паттерн широко используется в различных библиотеках или подходах. Например, в Android одним из самых распространённых примеров является создание
AlertDialog
при помощи Builder.
Вот хорошая
статья, которая рассказывает о правильном создании объектов при помощи Builder. Пару тезисов оттуда:
0️⃣ Как ни странно, при создании объекта через Builder важно верно определить конструктор, который будет принимать параметры без которых объект не может существовать. В примере с
AlertDialog
таким параметром будет
Context
.
Например, в прошлых версиях Android у нас была возможность сделать
Notification
, который не показывался бы системой, а также приложение не падало с исключением – пример неверно созданного Builder.
1️⃣ Для каждого поля необходимо выставить параметр по умолчанию, например
null
. При использовании шаблона Builder рекомендуется сделать конструктор private, чтобы ограничить создание объекта только для внутреннего Builder.
2️⃣ Важно сделать верификацию объектов. Автор дает сразу 3 примера, где можно верифицировать добавляемые объекты: сразу после использования метода, при вызове метода
build()
или уже внутри объекта.
Хорошей практикой в данном примере будет использование 2 и 3 подхода одновременно.
3️⃣ Для того, чтобы сделать свой Builder можно использовать Kotlin DSL, который идеально подходит для этого паттерна. Кроме того, не стоит забывать о именованных параметрах, особенно когда вы указываете переменные одного типа.
В целом, этот паттерн один из самых популярных, и широко применяется на практике. Используйте его, если у вас есть большое число конструкторов, и вы заметно улучшите читаемость вашего кода. ✌️