Привет, У меня есть сомнение в шаблоне проектирования строителя. Из видеороликов с множественными точками я понял, что этот шаблон используется, чтобы избежать сложности телескопических конструкторов в изменяемых классах. Некоторые другие сайты объясняют это как способ разработки или создания сложного объекта, сохраняя компоновщик как состав. Я полностью смущен. Пожалуйста, уточните то же самое?Builder pattern, где следует применять
ответ
Сложные конструкторы могут быть плохими для неизменяемых или изменяемых классов.
Одна проблема с большими конструкторами (или иерархией конструкторов) заключается в том, что вы можете получить большой конструктор, используемый для нескольких целей. Например, некоторые параметры могут быть null
, если вы создаете совершенно новый объект, но они не должны иметь значение null, когда вы вызываете его из другого места.
Очень сложно выяснить, как использовать эти конструкторы. Даже если они встроены в валидацию, вам все равно нужно проверить, что вы создаете ее правильно. У строителя могут быть методы, которые дают подсказки или заставляют людей создавать его правильно. Например, builder.copy(obj).setName("newObj").build()
. Это дает нам подсказку о том, как скопировать объект, это может быть лучше, чем просмотр конструкторов для правильного использования.
Другая проблема заключается в том, что вы должны предоставить все необходимые конструкторы args. Даже если есть нормальные значения по умолчанию, вы можете быть вынуждены что-то поставлять. Строитель может содержать значения по умолчанию, поэтому вы задаете только интересующие вас параметры.
Другая проблема заключается в том, что большой конструктор может иметь несколько параметров одного и того же типа в строке. Он просит кого-то случайно ошибиться в неправильном значении. Строитель заставляет вас вызвать метод со значимым именем.
Строитель также имеет то же преимущество, что и статический завод. Он может вернуть интерфейс вместо конкретного типа. Это хорошо, потому что вы поощряете классы клиентов работать против интерфейса.
Связанный ответ в комментариях имеет более веские причины.
- 1. Builder pattern
- 2. Builder pattern precision
- 3. Builder pattern multiple varargs
- 4. Builder design pattern
- 5. Design Pattern: Builder
- 6. Builder Pattern and Inheritance
- 7. Java generics + Builder pattern
- 8. Effective Java: Builder Pattern
- 9. Тестирование Builder Pattern
- 10. Повторы в Builder Pattern
- 11. Builder Pattern and Persistence
- 12. Ограничитель Builder Pattern Parameter
- 13. Jackson with Builder Pattern
- 14. Pseudo-Backward Builder Pattern?
- 15. C# Builder Pattern
- 16. Builder pattern vs Factory Mmethod pattern
- 17. Где применять класс clearfix
- 18. Builder Pattern более одного директора
- 19. Simple XML Serialization + Builder pattern
- 20. Builder pattern vs. config object
- 21. Builder pattern - чтение конфигурационного файла
- 22. C++ Builder Pattern with Inheritance
- 23. ElasticSearch применять следует и диапазон
- 24. Builder Pattern: Зачем нам нужно .build()?
- 25. Где можно применять OSGI?
- 26. Где следует использовать AsNoTracking?
- 27. Generic Type From Enum & The Builder Pattern
- 28. Builder Pattern: Почему директор конструирует объект?
- 29. Javascript builder pattern с использованием частных переменных
- 30. именованные параметры vs type-safe builder pattern
См. Этот ответ: http://stackoverflow.com/a/1953567/1155984 –
[Пункт 2. Страница 11 и далее] (http://uet.vnu.edu.vn/~chauttm/e-books/ java/Effective.Java.2nd.Edition.May.2008.3000th.Release.pdf) –
Сказанное быстро, интерес шаблона проектирования Builder заключается в том, чтобы иметь несколько классов-конструкторов (по одному на тип инициализации) и один директор класса для управления желаемым строитель. Интерес шаблона Factory заключается в том, что вызывающий абонент не должен знать реализацию, а просто интерфейс сборки объекта. Тезисы 2 гола не являются несовместимыми. –