Спасибо мужик! Это был максимально легкий в понимании и в тоже время емкий пример этого паттерна, не знаю как благодарить)
@ИльяСкутельник-ф6э4 жыл бұрын
Палец вверх! Прогал на .NET MVC и не понимал, как работают билдеры конфигурации, но как же все, оказывается, просто!)) Убеждаюсь, что ООП-шнику без паттернов некуда
@Дмитрий-з7м9е Жыл бұрын
Самое лучшее объяснение, вы лучший!
@scZooK9 жыл бұрын
Спасибо за урок!
@i_programmer6 жыл бұрын
Тут ошибка. "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_Poliakov9 жыл бұрын
Было бы не плохо еще рассказывать о применении паттернов для более реальных задач. По себе знаю что так понять шаблоны гораздо легче и сразу возникает понимание в каких ситуациях применять. А примеры с машинами это только теория.
@programm4you9 жыл бұрын
+Ilya Polyakov Илья, с одной стороны ты прав, что нужно показывать реальные практические примеры использования этих шаблонов, но с другой стороны, сложные примеры могут запутать новичков. Я пытаюсь на простых примерах показать взаимосвязь классов в UML-диаграмме. И плюс сложный пример займет значительно больше времени. Спасибо за комментарий. Если получится, попробую потом сделать практическое дополнение к каждому шаблону: найти пример из самой библиотеки JDK или какие-то реальные примеры.
@andrewvalevskiy38798 жыл бұрын
Не смог не подписаться
@xfgweb7 жыл бұрын
Если объект составной, то в методы билдера нужно передавать объекты (запчасти) или можно данные, а внутри метода создавать запчасть (объект) ? Как принято?
@croptv70937 жыл бұрын
чем отличается этот шаблон от Фабрики?
@m0rtis2485 жыл бұрын
Фабрика фокусируется на создании объектов, а строитель на конструировании самого объекта.
@IbnSabilAbuAbdullahАй бұрын
как я понял, билдер нужен для тонкой настройки объекта
@ДмитрийКалинин-н1г3 жыл бұрын
Не мог понять чем же отличается от абстрактной фабрики, данный код не будет работать если мы захотим создать еще одну машину, и не будем указывать максимальную скорость, следовательно рушится весь смысл этого паттерна. Для будущего поколения оставлю ссылку, человека, кто предоставил правильный пример github.com/A1esandr/javadp/tree/master/builder
@IbnSabilAbuAbdullahАй бұрын
этот пример он показал еще в начале, тут нет Dirctor ' а
@DomiNoR7778 жыл бұрын
можно ли в билдере задавать условия создания объекта? Например я для создания объекта вытягиваю из базы данные, но одно значение некорректное хранится в базе. Как сделать чтобы при проверке этого параметра, билдер либо создал, либо не создал объект? Может выкинул какой-то ексепшн и пошел дальше по логике(критичность создания этого объекта не влияет на работоспособность всей программы)
@АртёмЯрошенко-и3е3 жыл бұрын
Не совсем понимаю разницу между этим паттерном и фабрикой
@Shkvarka7 жыл бұрын
непонятно главное, почему проще использовать паттерн Билдер, а не напрямую создавать объекты? в конкретных реализациях субару и мерседес мы можем задать дефолтные значения итд... что упрощает билдер или делает легче для понимания?
@alexeymalyshev82107 жыл бұрын
Просто бывают случаи, когда в конструктор нужно передавать множество однотипных данных, а помнить порядок данных которые принимает конструктор как-то не очень, особенно если данный класс писал другой разработчик, вам тогда надо "бежать" в данный класс и смотреть в правильном ли порядке вы передаете данные.
@kosbarable7 жыл бұрын
Т.е. подождите, вся эта замута с дублирующим кодом синтаксиса конструктора, вынесенная в отдельный класс, всё это ради того, чтобы сложный объект можно было создавать через = new CarBilder().Color().Transmision().StupidBoyInsideTHECAR(). ?!?! Лол, потому что, как в первом случае вы полезете в исходники и описание конструктора этого сложного объекта, так и с билдером вам нужно будет знать, какие методы вызывать у билдера, дабы получить на выходе ТОТ САМЫЙ сложный объект. Упрощение? Нет... Поддержка кода? Ничем не лучше... Глупый, очень глупый паттерн. А второй случай с директором (дополнительной абстракцией) и вовсе хочется просто взять и вынести общие у Субары и Мондео данные в один абстрактный предок. И понятнее читать и проще поддерживать.
@AlekseiKorolev-g6z6 жыл бұрын
Этот пример пример сделан настолько доходчивым, чтобы new ProgerBuilder() .setPatternUnderstanding("Builder") .setPatternUnderstanding("Decorator") .setAlgorithmKnowledge("QuickSort") .setAlgorithmKnowledge("MergeSort") .setLanguageKnowledge("Java") .setStupidBoyInsideKZbin(" Konstantin Bartashevich") .build() работало как надо, а не через тяжелый конструктор. Из практических применений тот же самый StringBuilder или какие-нибудь queryBuilder для sql запросов.
@kosbarable6 жыл бұрын
А можно апеллировать к тому что я написал, а не просто повторять то что было в видео?
@alexeystaroverov48046 жыл бұрын
В билдере можете пропустить какой-то из методов в цепочке. Если пропустите в конструкторе - получите ошибку компилятора. А вот насчет абстрактного билдера - это уже перебор в книжке. На практике народ упрощает эти паттерны и использует самый простой вариант всегда. Ни разу не видел сложного билдера на практике.
@АртемАртемыч-и3ж6 жыл бұрын
Какое принципиальное отличие билдера от абстрактной фабрики?
@hotdog75rus9 жыл бұрын
Уж очень первый шаблон на дикоратора смахивает.
@programm4you9 жыл бұрын
+Око Сибири декоратор будет следующим как раз)) и попробую там показать различия/особенности