tgoop.com/android_live/647
Last Update:
Паттерн 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, который идеально подходит для этого паттерна. Кроме того, не стоит забывать о именованных параметрах, особенно когда вы указываете переменные одного типа.
В целом, этот паттерн один из самых популярных, и широко применяется на практике. Используйте его, если у вас есть большое число конструкторов, и вы заметно улучшите читаемость вашего кода. ✌️
BY Android Live 🤖

Share with your friend now:
tgoop.com/android_live/647