Шаблоны Java. Строитель (Builder)

  Рет қаралды 26,657

Vladimir Vysokomornyi

Vladimir Vysokomornyi

Күн бұрын

Пікірлер: 31
@IbnSabilAbuAbdullah
@IbnSabilAbuAbdullah Ай бұрын
Спасибо мужик! Это был максимально легкий в понимании и в тоже время емкий пример этого паттерна, не знаю как благодарить)
@ИльяСкутельник-ф6э
@ИльяСкутельник-ф6э 4 жыл бұрын
Палец вверх! Прогал на .NET MVC и не понимал, как работают билдеры конфигурации, но как же все, оказывается, просто!)) Убеждаюсь, что ООП-шнику без паттернов некуда
@Дмитрий-з7м9е
@Дмитрий-з7м9е Жыл бұрын
Самое лучшее объяснение, вы лучший!
@scZooK
@scZooK 9 жыл бұрын
Спасибо за урок!
@i_programmer
@i_programmer 6 жыл бұрын
Тут ошибка. "builder.getCar()" не должен находится в методе "Car BuildCar()", а сам метод "Car BuildCar()" не должен возвращать машину, он должен только её строить. Долго объяснять, но машину должен в итоге вернуть именно сам билдер. Директор лишь управляет строителем и задает какие части в какой последовательности прикрепить. В итоге, по феншую (точнее по GoF) будет правильно в Main написать: CarBuilder builder = new SubaruBuilder(); // new FordMondeoBuilder(); Director director = New Director(builder); director.BuildCar(); Car car = buider.getCar();
@Ilia_Poliakov
@Ilia_Poliakov 9 жыл бұрын
Было бы не плохо еще рассказывать о применении паттернов для более реальных задач. По себе знаю что так понять шаблоны гораздо легче и сразу возникает понимание в каких ситуациях применять. А примеры с машинами это только теория.
@programm4you
@programm4you 9 жыл бұрын
+Ilya Polyakov Илья, с одной стороны ты прав, что нужно показывать реальные практические примеры использования этих шаблонов, но с другой стороны, сложные примеры могут запутать новичков. Я пытаюсь на простых примерах показать взаимосвязь классов в UML-диаграмме. И плюс сложный пример займет значительно больше времени. Спасибо за комментарий. Если получится, попробую потом сделать практическое дополнение к каждому шаблону: найти пример из самой библиотеки JDK или какие-то реальные примеры.
@andrewvalevskiy3879
@andrewvalevskiy3879 8 жыл бұрын
Не смог не подписаться
@xfgweb
@xfgweb 7 жыл бұрын
Если объект составной, то в методы билдера нужно передавать объекты (запчасти) или можно данные, а внутри метода создавать запчасть (объект) ? Как принято?
@croptv7093
@croptv7093 7 жыл бұрын
чем отличается этот шаблон от Фабрики?
@m0rtis248
@m0rtis248 5 жыл бұрын
Фабрика фокусируется на создании объектов, а строитель на конструировании самого объекта.
@IbnSabilAbuAbdullah
@IbnSabilAbuAbdullah Ай бұрын
как я понял, билдер нужен для тонкой настройки объекта
@ДмитрийКалинин-н1г
@ДмитрийКалинин-н1г 3 жыл бұрын
Не мог понять чем же отличается от абстрактной фабрики, данный код не будет работать если мы захотим создать еще одну машину, и не будем указывать максимальную скорость, следовательно рушится весь смысл этого паттерна. Для будущего поколения оставлю ссылку, человека, кто предоставил правильный пример github.com/A1esandr/javadp/tree/master/builder
@IbnSabilAbuAbdullah
@IbnSabilAbuAbdullah Ай бұрын
этот пример он показал еще в начале, тут нет Dirctor ' а
@DomiNoR777
@DomiNoR777 8 жыл бұрын
можно ли в билдере задавать условия создания объекта? Например я для создания объекта вытягиваю из базы данные, но одно значение некорректное хранится в базе. Как сделать чтобы при проверке этого параметра, билдер либо создал, либо не создал объект? Может выкинул какой-то ексепшн и пошел дальше по логике(критичность создания этого объекта не влияет на работоспособность всей программы)
@АртёмЯрошенко-и3е
@АртёмЯрошенко-и3е 3 жыл бұрын
Не совсем понимаю разницу между этим паттерном и фабрикой
@Shkvarka
@Shkvarka 7 жыл бұрын
непонятно главное, почему проще использовать паттерн Билдер, а не напрямую создавать объекты? в конкретных реализациях субару и мерседес мы можем задать дефолтные значения итд... что упрощает билдер или делает легче для понимания?
@alexeymalyshev8210
@alexeymalyshev8210 7 жыл бұрын
Просто бывают случаи, когда в конструктор нужно передавать множество однотипных данных, а помнить порядок данных которые принимает конструктор как-то не очень, особенно если данный класс писал другой разработчик, вам тогда надо "бежать" в данный класс и смотреть в правильном ли порядке вы передаете данные.
@kosbarable
@kosbarable 7 жыл бұрын
Т.е. подождите, вся эта замута с дублирующим кодом синтаксиса конструктора, вынесенная в отдельный класс, всё это ради того, чтобы сложный объект можно было создавать через = new CarBilder().Color().Transmision().StupidBoyInsideTHECAR(). ?!?! Лол, потому что, как в первом случае вы полезете в исходники и описание конструктора этого сложного объекта, так и с билдером вам нужно будет знать, какие методы вызывать у билдера, дабы получить на выходе ТОТ САМЫЙ сложный объект. Упрощение? Нет... Поддержка кода? Ничем не лучше... Глупый, очень глупый паттерн. А второй случай с директором (дополнительной абстракцией) и вовсе хочется просто взять и вынести общие у Субары и Мондео данные в один абстрактный предок. И понятнее читать и проще поддерживать.
@AlekseiKorolev-g6z
@AlekseiKorolev-g6z 6 жыл бұрын
Этот пример пример сделан настолько доходчивым, чтобы new ProgerBuilder() .setPatternUnderstanding("Builder") .setPatternUnderstanding("Decorator") .setAlgorithmKnowledge("QuickSort") .setAlgorithmKnowledge("MergeSort") .setLanguageKnowledge("Java") .setStupidBoyInsideKZbin(" Konstantin Bartashevich") .build() работало как надо, а не через тяжелый конструктор. Из практических применений тот же самый StringBuilder или какие-нибудь queryBuilder для sql запросов.
@kosbarable
@kosbarable 6 жыл бұрын
А можно апеллировать к тому что я написал, а не просто повторять то что было в видео?
@alexeystaroverov4804
@alexeystaroverov4804 6 жыл бұрын
В билдере можете пропустить какой-то из методов в цепочке. Если пропустите в конструкторе - получите ошибку компилятора. А вот насчет абстрактного билдера - это уже перебор в книжке. На практике народ упрощает эти паттерны и использует самый простой вариант всегда. Ни разу не видел сложного билдера на практике.
@АртемАртемыч-и3ж
@АртемАртемыч-и3ж 6 жыл бұрын
Какое принципиальное отличие билдера от абстрактной фабрики?
@hotdog75rus
@hotdog75rus 9 жыл бұрын
Уж очень первый шаблон на дикоратора смахивает.
@programm4you
@programm4you 9 жыл бұрын
+Око Сибири декоратор будет следующим как раз)) и попробую там показать различия/особенности
@eduardmart1237
@eduardmart1237 7 жыл бұрын
У тебя мондео?)
@programm4you
@programm4you 7 жыл бұрын
Эдуард Мартыненко киа рио))
@pelmensmetankovich8902
@pelmensmetankovich8902 Жыл бұрын
Грыжа
Шаблоны Java. Builder (Строитель)
10:58
Eugene Suleimanov
Рет қаралды 52 М.
Шаблоны Java. Состояние (State)
18:41
Vladimir Vysokomornyi
Рет қаралды 11 М.
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 191 МЛН
Thank you Santa
00:13
Nadir Show
Рет қаралды 46 МЛН
Шаблоны Java. Фабричный метод (Factory Method)
18:04
Vladimir Vysokomornyi
Рет қаралды 42 М.
Шаблоны Java. Стратегия (Strategy)
18:05
Vladimir Vysokomornyi
Рет қаралды 15 М.
Шаблоны Java. Абстрактная фабрика (Abstract Factory)
17:28
Шаблоны Java. Мост (Bridge)
21:07
Vladimir Vysokomornyi
Рет қаралды 19 М.
Шаблоны Java. Декоратор (Decorator / Wrapper)
27:05
Vladimir Vysokomornyi
Рет қаралды 33 М.
Шаблоны Java. Хранитель (Memento)
13:11
Vladimir Vysokomornyi
Рет қаралды 8 М.
Шаблоны Java. Адаптер (Adapter)
11:31
Vladimir Vysokomornyi
Рет қаралды 35 М.
Шаблоны Java. Делегат (Delegate)
15:01
Vladimir Vysokomornyi
Рет қаралды 38 М.
Шаблоны Java. Приспособленец (Flyweight)
16:52
Vladimir Vysokomornyi
Рет қаралды 8 М.
The IMPOSSIBLE Puzzle..
00:55
Stokes Twins
Рет қаралды 191 МЛН