Тёмный

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

Vladimir Vysokomornyi
Подписаться 20 тыс.
Просмотров 26 тыс.
50% 1

Рассмотрим шаблон проектирования Строитель (Builder). Данный паттерн проектирования на примере Java мы рассмотрим в двух вариантах: простом и сложном.
вКонтакте: java4you
Плейлист: • Шаблоны проектирования...
Видео: • Шаблоны Java. Строител...

Опубликовано:

 

4 окт 2015

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 28   
@user-xr6op7zx1f
@user-xr6op7zx1f 4 года назад
Палец вверх! Прогал на .NET MVC и не понимал, как работают билдеры конфигурации, но как же все, оказывается, просто!)) Убеждаюсь, что ООП-шнику без паттернов некуда
@user-qb3ck7cq3k
@user-qb3ck7cq3k Год назад
Самое лучшее объяснение, вы лучший!
@scZooK
@scZooK 8 лет назад
Спасибо за урок!
@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();
@Ardentis91
@Ardentis91 8 лет назад
Было бы не плохо еще рассказывать о применении паттернов для более реальных задач. По себе знаю что так понять шаблоны гораздо легче и сразу возникает понимание в каких ситуациях применять. А примеры с машинами это только теория.
@programm4you
@programm4you 8 лет назад
+Ilya Polyakov Илья, с одной стороны ты прав, что нужно показывать реальные практические примеры использования этих шаблонов, но с другой стороны, сложные примеры могут запутать новичков. Я пытаюсь на простых примерах показать взаимосвязь классов в UML-диаграмме. И плюс сложный пример займет значительно больше времени. Спасибо за комментарий. Если получится, попробую потом сделать практическое дополнение к каждому шаблону: найти пример из самой библиотеки JDK или какие-то реальные примеры.
@andrewvalevskiy3879
@andrewvalevskiy3879 8 лет назад
Не смог не подписаться
@xfg9183
@xfg9183 7 лет назад
Если объект составной, то в методы билдера нужно передавать объекты (запчасти) или можно данные, а внутри метода создавать запчасть (объект) ? Как принято?
@DomiNoR777
@DomiNoR777 8 лет назад
можно ли в билдере задавать условия создания объекта? Например я для создания объекта вытягиваю из базы данные, но одно значение некорректное хранится в базе. Как сделать чтобы при проверке этого параметра, билдер либо создал, либо не создал объект? Может выкинул какой-то ексепшн и пошел дальше по логике(критичность создания этого объекта не влияет на работоспособность всей программы)
@croptv7093
@croptv7093 7 лет назад
чем отличается этот шаблон от Фабрики?
@m0rtis248
@m0rtis248 5 лет назад
Фабрика фокусируется на создании объектов, а строитель на конструировании самого объекта.
@user-ud6ws5fi6y
@user-ud6ws5fi6y 3 года назад
Не мог понять чем же отличается от абстрактной фабрики, данный код не будет работать если мы захотим создать еще одну машину, и не будем указывать максимальную скорость, следовательно рушится весь смысл этого паттерна. Для будущего поколения оставлю ссылку, человека, кто предоставил правильный пример github.com/A1esandr/javadp/tree/master/builder
@user-rl6xv2zm7k
@user-rl6xv2zm7k 6 лет назад
Какое принципиальное отличие билдера от абстрактной фабрики?
@Shkvarka
@Shkvarka 7 лет назад
непонятно главное, почему проще использовать паттерн Билдер, а не напрямую создавать объекты? в конкретных реализациях субару и мерседес мы можем задать дефолтные значения итд... что упрощает билдер или делает легче для понимания?
@alexeymalyshev8210
@alexeymalyshev8210 6 лет назад
Просто бывают случаи, когда в конструктор нужно передавать множество однотипных данных, а помнить порядок данных которые принимает конструктор как-то не очень, особенно если данный класс писал другой разработчик, вам тогда надо "бежать" в данный класс и смотреть в правильном ли порядке вы передаете данные.
@kosbarable
@kosbarable 6 лет назад
Т.е. подождите, вся эта замута с дублирующим кодом синтаксиса конструктора, вынесенная в отдельный класс, всё это ради того, чтобы сложный объект можно было создавать через = new CarBilder().Color().Transmision().StupidBoyInsideTHECAR(). ?!?! Лол, потому что, как в первом случае вы полезете в исходники и описание конструктора этого сложного объекта, так и с билдером вам нужно будет знать, какие методы вызывать у билдера, дабы получить на выходе ТОТ САМЫЙ сложный объект. Упрощение? Нет... Поддержка кода? Ничем не лучше... Глупый, очень глупый паттерн. А второй случай с директором (дополнительной абстракцией) и вовсе хочется просто взять и вынести общие у Субары и Мондео данные в один абстрактный предок. И понятнее читать и проще поддерживать.
@user-qn1er2ns2h
@user-qn1er2ns2h 6 лет назад
Этот пример пример сделан настолько доходчивым, чтобы new ProgerBuilder() .setPatternUnderstanding("Builder") .setPatternUnderstanding("Decorator") .setAlgorithmKnowledge("QuickSort") .setAlgorithmKnowledge("MergeSort") .setLanguageKnowledge("Java") .setStupidBoyInsideRU-vid(" Konstantin Bartashevich") .build() работало как надо, а не через тяжелый конструктор. Из практических применений тот же самый StringBuilder или какие-нибудь queryBuilder для sql запросов.
@kosbarable
@kosbarable 6 лет назад
А можно апеллировать к тому что я написал, а не просто повторять то что было в видео?
@alexeystaroverov4804
@alexeystaroverov4804 6 лет назад
В билдере можете пропустить какой-то из методов в цепочке. Если пропустите в конструкторе - получите ошибку компилятора. А вот насчет абстрактного билдера - это уже перебор в книжке. На практике народ упрощает эти паттерны и использует самый простой вариант всегда. Ни разу не видел сложного билдера на практике.
@user-sy3uo4ki6v
@user-sy3uo4ki6v 3 года назад
Не совсем понимаю разницу между этим паттерном и фабрикой
@eduardmart1237
@eduardmart1237 7 лет назад
У тебя мондео?)
@programm4you
@programm4you 7 лет назад
Эдуард Мартыненко киа рио))
@hotdog75rus
@hotdog75rus 8 лет назад
Уж очень первый шаблон на дикоратора смахивает.
@programm4you
@programm4you 8 лет назад
+Око Сибири декоратор будет следующим как раз)) и попробую там показать различия/особенности
@pelmensmetankovich8902
@pelmensmetankovich8902 Год назад
Грыжа
Далее
Шаблоны Java. Состояние (State)
18:41
Шаблоны Java. Стратегия (Strategy)
18:05
Урок Java 273: Patterns 6: Builder
10:12
Просмотров 15 тыс.
Шаблоны Java. Одиночка (Singleton)
31:02