[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-builder":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},1259,"chto-takoe-pattern-builder",40,"patterny","Паттерны","🧩","Что такое паттерн Builder?","Builder -- паттерн, отделяющий конструирование сложного объекта от его представления, позволяя создавать объекты пошагово.\n\n> Аналогия из жизни: Builder -- как конструктор бургера в приложении доставки. Вы выбираете булочку, котлету, соус и добавки шаг за шагом, а в конце нажимаете \"Заказать\" -- и получаете готовый бургер.\n\n\u003Cdetails>\n\u003Csummary>Ручной Builder\u003C\u002Fsummary>\n\n```java\npublic class HttpRequest {\n    private final String url;\n    private final String method;\n    private final Map\u003CString, String> headers;\n    private final String body;\n\n    private HttpRequest(Builder builder) {\n        this.url = builder.url;\n        this.method = builder.method;\n        this.headers = Map.copyOf(builder.headers);\n        this.body = builder.body;\n    }\n\n    public static class Builder {\n        private final String url;       \u002F\u002F обязательный\n        private String method = \"GET\";  \u002F\u002F по умолчанию\n        private final Map\u003CString, String> headers = new HashMap\u003C>();\n        private String body;\n\n        public Builder(String url) { this.url = url; }\n\n        public Builder method(String method) { this.method = method; return this; }\n        public Builder header(String key, String value) { headers.put(key, value); return this; }\n        public Builder body(String body) { this.body = body; return this; }\n\n        public HttpRequest build() {\n            if (url == null) throw new IllegalStateException(\"URL is required\");\n            return new HttpRequest(this);\n        }\n    }\n}\n\n\u002F\u002F Использование -- читаемо, невозможно забыть обязательные параметры\nHttpRequest request = new HttpRequest.Builder(\"https:\u002F\u002Fapi.example.com\")\n    .method(\"POST\")\n    .header(\"Content-Type\", \"application\u002Fjson\")\n    .body(\"{\\\"name\\\": \\\"John\\\"}\")\n    .build();\n```\n\n\u003C\u002Fdetails>\n\n```java\n\u002F\u002F Lombok @Builder -- генерирует Builder автоматически\n@Builder\n@Value \u002F\u002F immutable\npublic class UserDto {\n    String name;\n    String email;\n    int age;\n}\n\nUserDto user = UserDto.builder()\n    .name(\"John\")\n    .email(\"john@mail.com\")\n    .age(30)\n    .build();\n```\n\n### Важное\n\n- Builder решает проблему \"телескопического конструктора\" (много параметров, часть optional)\n- Объект, созданный Builder, обычно immutable\n- Lombok `@Builder` -- стандарт в Spring-проектах для DTO\n\n### Частые ошибки\n\n- Builder для объекта с 2 полями -- over-engineering; достаточно конструктора или record\n- Мутабельный объект после build() -- Builder должен создавать immutable объект\n- Повторное использование Builder -- после build() Builder не должен использоваться повторно\n\n### Как используется в 2026\n\n- Lombok `@Builder` -- повсеместно в Spring-проектах\n- Java Records -- для простых DTO без Builder; Builder -- для объектов с optional полями\n- Fluent API в JDK: `HttpClient.newBuilder()`, `HttpRequest.newBuilder()`, `ProcessBuilder`\n\n> **На собеседовании:** покажите, что понимаете, когда Builder нужен (много optional-параметров, immutable-объект), а когда избыточен (2-3 поля -- достаточно record). Частая ошибка -- не упомянуть Lombok и писать Builder вручную в 2026 году.","","junior",[15],"patterns",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое паттерн Singleton? — Gymterview","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа к нему.","Singleton -- паттерн, гарантирующий, что у класса есть только один экземпляр, и предоставляющий глобальную точку доступа",[15,13],true]