[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-factory-method-i-abstract-factory":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},1260,"chto-takoe-pattern-factory-method-i-abstract-factory",40,"patterny","Паттерны","🧩","Что такое паттерн Factory Method и Abstract Factory?","Factory Method -- паттерн, определяющий интерфейс для создания объекта, но позволяющий подклассам решать, какой класс создавать. Abstract Factory -- интерфейс для создания семейств связанных объектов без указания конкретных классов.\n\n| Критерий | Factory Method | Abstract Factory |\n|----------|---------------|-----------------|\n| Что создаёт | Один продукт | Семейство связанных продуктов |\n| Суть | Выбор реализации | Согласованность семейства |\n| Расширение | Новый подкласс фабрики | Новая фабрика для семейства |\n| Пример в JDK | `Calendar.getInstance()` | `UIManager` (Swing Look&Feel) |\n\n\u003Cdetails>\n\u003Csummary>Factory Method -- пример\u003C\u002Fsummary>\n\n```java\ninterface Notification {\n    void send(String message);\n}\n\nclass EmailNotification implements Notification {\n    public void send(String message) { \u002F* отправка email *\u002F }\n}\nclass SmsNotification implements Notification {\n    public void send(String message) { \u002F* отправка SMS *\u002F }\n}\nclass PushNotification implements Notification {\n    public void send(String message) { \u002F* push-уведомление *\u002F }\n}\n\n\u002F\u002F Фабричный метод\nclass NotificationFactory {\n    static Notification create(String type) {\n        return switch (type) {\n            case \"email\" -> new EmailNotification();\n            case \"sms\"   -> new SmsNotification();\n            case \"push\"  -> new PushNotification();\n            default -> throw new IllegalArgumentException(\"Unknown type: \" + type);\n        };\n    }\n}\n\n\u002F\u002F Использование\nNotification notification = NotificationFactory.create(\"email\");\nnotification.send(\"Привет!\");\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Abstract Factory -- пример\u003C\u002Fsummary>\n\n```java\ninterface UIFactory {\n    Button createButton();\n    TextField createTextField();\n}\n\nclass MaterialUIFactory implements UIFactory {\n    public Button createButton() { return new MaterialButton(); }\n    public TextField createTextField() { return new MaterialTextField(); }\n}\nclass IOSUIFactory implements UIFactory {\n    public Button createButton() { return new IOSButton(); }\n    public TextField createTextField() { return new IOSTextField(); }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Важное\n\n- В Spring: `BeanFactory` -- реализация Factory; `FactoryBean\u003CT>` -- кастомная фабрика бинов\n- `switch` с sealed interface -- современная реализация Factory в Java 21+\n\n### Частые ошибки\n\n- Factory для одной реализации -- если нет вариативности, фабрика не нужна\n- God Factory -- фабрика, знающая о 50 типах; лучше разбить на несколько\n\n### Как используется в 2026\n\n- Spring создаёт бины через фабрику (ApplicationContext)\n- `@ConditionalOnProperty` -- условное создание бинов, фабрика на уровне конфигурации\n\n> **На собеседовании:** ключевое -- чётко разграничить Factory Method (один продукт, выбор реализации) и Abstract Factory (семейство продуктов, согласованность). Частая ошибка -- смешивать их или не привести пример из Spring.","","middle",[15],"patterns",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Что такое паттерн Factory Method и Abstract Factory? — Gymterview","Factory Method -- паттерн, определяющий интерфейс для создания объекта, но позволяющий подклассам решать, какой класс создавать. Abstract Factory -- интерфейс д","Factory Method -- паттерн, определяющий интерфейс для создания объекта, но позволяющий подклассам решать, какой класс со",[15,13],"Factory Method -- паттерн, определяющий интерфейс для создания объекта, но позволяющий подклассам решать, какой класс создавать. Abstract Factory -- интерфейс для создания семейств связанных объектов без указания конкретных классов.",true]