No video

Java паттерны проектирования 3: Builder

  Рет қаралды 14,840

Уроки Java

Уроки Java

5 жыл бұрын

Cкидки до 22-го января на все курсы всего за 9.99:
Каждый купон расчитан на 10 покупок, спешите!
Новый курс по Photoshop:
www.udemy.com/course/draft/33...
HIBERNATE:
www.udemy.com/course/hibernat...
JPA:
www.udemy.com/course/jpa-kurs...
HTML + CSS:
www.udemy.com/course/html-kur...
MAVEN:
www.udemy.com/course/maven-ku...
GIT:
www.udemy.com/course/git-stud...
KOTLIN
www.udemy.com/course/kotlin-b...
SQL:
www.udemy.com/course/sql-kurs...
IDEA
www.udemy.com/course/intellij...
Паттерны Java:
www.udemy.com/course/java-pat...
Java EE:
www.udemy.com/course/kurs-jav...
Английский язык:
www.udemy.com/course/eng-cour...
JAVA:
www.udemy.com/course/java-bes...
Apache Spark:
www.udemy.com/course/apache-s...

Пікірлер: 52
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
в книгах встречал, что имена сеттеров билдера делают без слова set т.е. в вызов такой получается ...name("mike").age(20)...
@dreamer_vi905
@dreamer_vi905 4 ай бұрын
ага в библиотеке Lombok именно так.
@skanderro2326
@skanderro2326 2 жыл бұрын
Очень хорошее объяснение!
@user-qj2kd8oy1r
@user-qj2kd8oy1r 5 жыл бұрын
Скажите пожалуйста, можно ли сейчас приобрести Ваши уроки по Spring?
@user-ip9bn7lt6g
@user-ip9bn7lt6g 3 жыл бұрын
Стоит ли использовать builder в случае если нужно проверять параметры при создании экземпляра на согласованность? Например есть класс "Регион". У него есть столица/региональный центр и просто города. По очевидным причинам, региональный центр должен лежать во множестве городов, площадь региона не должна быть меньше суммы площадей населённых пунктов и.т.д. Хотелось бы отлавливать неправильно переданные комбинации параметров, но при этом не делать этого в основном конструкторе. Если возможно, то как это можно сделать?
@Graf_AMOR
@Graf_AMOR 5 жыл бұрын
Хороший, важный паттерн! Знакомые конструкции из андроид-разработки
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
на каком языке?
@megawow2295
@megawow2295 Жыл бұрын
​@@Das.Kleine.Krokodilна русском
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil Жыл бұрын
@@megawow2295 1cник?
@anikroan4357
@anikroan4357 10 ай бұрын
есть вопрос) если я удалю интерфейс и оставлю вспомогательный класс со всеми его методами, изменив только то что методы возвращают( то есть уже сам вспомогательный класс а не интерфейс) все будет работать точно так же. и я все так же смогу использовать не все поля. и создать сколько угодно разный Person. зачем тогда в данном примере интерфейс?
@alex57767
@alex57767 4 жыл бұрын
Обязателен ли интерфейс? Или можно просто писать класс PersonBuilder?
@maxkatrenko8865
@maxkatrenko8865 7 ай бұрын
Я тоже не понял зачем интерфейс
@alex_k21
@alex_k21 5 жыл бұрын
В Вашем коде можно напрямую обращаться к полям класса Person или cделать сеттеры в классе Person. В чем смысл?
@husivm
@husivm 5 жыл бұрын
Ну во первых я пишу все в одном файле для наглядности и не разбиваю на разные файлы и пакеты и не ставлю private для экономии времени, а во вторых даже если вы будете сетить каждое поле в отдельной строчке то что бы создать объект с 10 полями нужно 11 строчек кода, а используюя билдер можно создать все в одну строчку - new PersonBuilderImpl().setFirst().setSecond.setThird()....build()
@user-zx5sv3hb2u
@user-zx5sv3hb2u 5 жыл бұрын
Что для тебя как разработчику удобнее оказалось, win, *nix или macOS?
@husivm
@husivm 5 жыл бұрын
одинаково, мак красивый, убунта глючит поэтому предпочитаю минт, а так легко работаю на любой ОС и особо разницы не замечаю
@husivm
@husivm 5 жыл бұрын
А вобще у меня сейчас на работе линукс, дома винда, а видео записываю на маке потому что его можно взять в коворкинг, работаю на всем и разницы не особо замечаю
@Witcher-simple-YouTube
@Witcher-simple-YouTube 2 жыл бұрын
Просто Мега супер огонь чотко)
@romanihnatov5629
@romanihnatov5629 4 жыл бұрын
А как засетать значения юзеру(в методе у билдера), если нет сетеров у него, я имею ввиду, что поля юзера будут приватными в реальной программе и дав ему сетеры, то это лишает смысла этого паттерна, как быть тогда ?
@husivm
@husivm 4 жыл бұрын
Нет, сеттеры не лишают смысла, суть паттерна в том что если у тебя много поелей, и тебе надо их сетить через конструктор, при этом ты не знаешь какие поля будут сетиться, ты создашь миллион констукторов, что бы этого не делать, можно использовать паттерн билдер, при этом можно спокойно иметь сеттеры и геттеры и любой другой код который использует эти поля
@romanihnatov5629
@romanihnatov5629 4 жыл бұрын
@@husivm понял, спасибо, например в реализации с nested классом(либо у Вас/Джошуа Блох(Effective java), там нет сеттеров и поля вообще финальные, и насколько я понял объект получается immutable, мы один раз сбилдали и всё, либо можно не возвращать новый объект(внешнего класса), а сделать композицией и возращать новый, только если этот налл, это к примеру если нужно что-то перезасетать в объект после создания
@user-zx5sv3hb2u
@user-zx5sv3hb2u 5 жыл бұрын
А если нужно обязательно указывать, например, имя?
@R0MaNbI4-
@R0MaNbI4- 3 жыл бұрын
Можно сделать конструктор PersonBuilderImpl с нужными параметрами. Таким образом пользователь будет обязан ввести значение поля в конструкторе, иначе он не сможет создать Builder
@vladder2312
@vladder2312 5 жыл бұрын
А почему не вылетает исключение при выводе неинициализированной переменной? Откуда значение по умолчанию берётся?
@R0MaNbI4-
@R0MaNbI4- 3 жыл бұрын
Ты путаешь с объектами и NullPointerException У примитивных типов есть значение по умолчанию
@user-xf8sy1fc7d
@user-xf8sy1fc7d 5 жыл бұрын
А почему просто в Персоне написать сеттеры и заполнять только нужные поля?? в чем такой подход проигрывает показанному в видео? (А то про шаблон рассказали,а почему его выгоднее использовать не особо понятно)))
@husivm
@husivm 5 жыл бұрын
Если использовать сеттеры что бы создать объект с 10 полями нужно 11 строчек кода, используюя билдер, можно создать все в одну строчку - new PersonBuilderImpl().setFirst().setSecond.setThird()....build()
@user-xf8sy1fc7d
@user-xf8sy1fc7d 5 жыл бұрын
@@husivm Значит мы все сводим к компактности и читабельности кода? (Имею ввиду что это не быстрее, не эффективнее по памяти и тд)
@husivm
@husivm 5 жыл бұрын
@@user-xf8sy1fc7d да
@YuriyIva
@YuriyIva 5 жыл бұрын
@@husivm А как часто этот паттерн применяется на практике? Ну актуален он я так понимаю будет в POJO. Так что тогда лучше, использовать паттерн Builder + структуру POJO или всё таки конфигурацию IoC вместе с их адаптивными моделями, которые не требуют создания экземпляров по всему проекту? В плане простоты. Если мы уж берём этот патерн для простоты и читабельности.
@husivm
@husivm 5 жыл бұрын
на практике - если у Вас много конструкторов, которые можно заменить билдером, используете билдер
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
в питоне, кстати, подобные вещи решаются именованными аргументами
@Das.Kleine.Krokodil
@Das.Kleine.Krokodil 2 жыл бұрын
я смотрю, и в котлине тоже есть такое
@borymskyi
@borymskyi Жыл бұрын
Передаю привет аннотации @Builder из ламбока.
@alias77799
@alias77799 11 ай бұрын
Ну тут показывается как это реализуется под капотом, тоже полезно самим написать.
@borymskyi
@borymskyi 11 ай бұрын
@@alias77799 да, 10 мес назад я и не дооценивал полезность ролика.
@user-zw1ly2mq8m
@user-zw1ly2mq8m 5 жыл бұрын
А хіба анотація @Builder з lombok, не робить те саме?
@husivm
@husivm 5 жыл бұрын
Робить, но якби я показав просто анотицію, булоб не так зрозуміло. Дотого ж Ломбок не на всіх проектах використовуэться
@bogizzla
@bogizzla 5 жыл бұрын
эм, уже были же уроки по паттернам, что поменялось?
@olegbokerov7152
@olegbokerov7152 4 ай бұрын
Судя по другому ролику, смысл в том, что основной класс является immutable, т.е. неизменяемым - нельзя через сеттеры задавать новые значения полям - только через конструкторы, которых будет слишком много А на примере автора можно просто создать сеттеры и не страдать чушью, типа "теперь мы можем заполнить свойства объекта в одну строчку"
@user-uj2tp5sr4w
@user-uj2tp5sr4w 4 ай бұрын
Тут билдер больше нужен, если у вас множество полей, но вы не все их хотите заполнять или разное их сочетание. И в целом можно обойтись конструктором, но вы явно будете прописывать null. А с помощью билдера вы собираете нужные вам поля и создаете класс. Но соглашусь, что то, как это подано у автора, можно спокойно воспользоваться сеттерами.
@alexfirestarter8758
@alexfirestarter8758 4 жыл бұрын
а почему методы интерфейса PersonBuilder (кроме метода build) нельзя сделать void ? Почему они должны возвращать PersonBuilder ?
@maslus
@maslus 3 жыл бұрын
чтобы засетать все параметры в одну строку. Если метод будет void, то мы не получим объект, к которому после точки можно дописывать следующие сеттеры по цепочке.
@alias77799
@alias77799 11 ай бұрын
Method chaining
@maxkatrenko8865
@maxkatrenko8865 7 ай бұрын
Чтобы объект возвращал сам себя и можно было цепочкой сетапить данные по типу obj.name('Max').surname('Brown').build(); и только build() возвращает сам объект
@egoszina9453
@egoszina9453 3 жыл бұрын
И тебя взяли на работу в Лос-Анджелес? Втф мен!?
@husivm
@husivm 3 жыл бұрын
Что не так?
@dosodsin3624
@dosodsin3624 5 жыл бұрын
верните уроки по спрингу за деньги!!!
@YuriyIva
@YuriyIva 5 жыл бұрын
верните уроки по спрингу - но бесплатно! С меня лайки на все 400+ видео.
Шаблоны Java. Строитель (Builder)
19:36
Vladimir Vysokomornyi
Рет қаралды 26 М.
Why Is He Unhappy…?
00:26
Alan Chikin Chow
Рет қаралды 92 МЛН
EVOLUTION OF ICE CREAM 😱 #shorts
00:11
Savage Vlogs
Рет қаралды 14 МЛН
Про Kafka (основы)
49:23
Владимир Богдановский
Рет қаралды 385 М.
МЕНЯ ХАКНУЛИ НА $600
4:13
Уроки Java
Рет қаралды 4,7 М.
Пограничное расстройство личности за 10 минут
14:51
Левое полушарие Экстраверта
Рет қаралды 37 М.
Java паттерны проектирования 2: Bridge
10:00
Уроки Java
Рет қаралды 4,4 М.
SkyOS - An operating system that was developed by one person
12:33
Марк Аддерли
Рет қаралды 721
Why Is He Unhappy…?
00:26
Alan Chikin Chow
Рет қаралды 92 МЛН