Во время разработки мы часто сталкиваемся с созданием сложных котиков объектов, в которых может быть десяток (а то и два) различных свойств. Иногда создание котика может выглядеть довольно объемно, а некоторые параметры вообще могут быть опциональными или иметь какие-то значения по умолчанию, но мы всё равно их прописываем каждый раз. В таких случаях как раз поможет паттерн Builder. Основная идея: паттерн позволяет пошагово создать сложного котика, указав только нужные параметры. Сам паттерн разделяет создание котика и самого котика. И это позволяет нам менять объект в любой момент, не меняя процесс его создания (вот это звучит просто идеально для всяких публичных библиотек и апи). Реализация выглядит так: Посмотреть код можно здесь: https://github.com/Ladgertha/patterns/commit/1a768a2e136e64802afb545a97840219cddc420f Тут всё просто: у нас есть котик с параметрами. Внутри котика делаем класс Builder и для каждого параметра нужно сделать значение по умолчанию и публичный сеттер. Так