[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-patterny-chto-takoe-pattern-adapter":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},1264,"chto-takoe-pattern-adapter",40,"patterny","Паттерны","🧩","Что такое паттерн Adapter?","Adapter -- паттерн, преобразующий интерфейс класса в другой интерфейс, ожидаемый клиентом. Позволяет работать вместе классам с несовместимыми интерфейсами.\n\n> Аналогия из жизни: Adapter -- как переходник для розетки. Европейская вилка не подходит к американской розетке, но адаптер решает проблему, не меняя ни вилку, ни розетку.\n\n\u003Cdetails>\n\u003Csummary>Пример кода\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Существующий интерфейс\ninterface MediaPlayer {\n    void play(String filename);\n}\n\n\u002F\u002F Несовместимый интерфейс стороннего API\nclass AdvancedPlayer {\n    void playMp4(String file) { \u002F* ... *\u002F }\n    void playMkv(String file) { \u002F* ... *\u002F }\n}\n\n\u002F\u002F Адаптер\nclass MediaAdapter implements MediaPlayer {\n    private final AdvancedPlayer advancedPlayer = new AdvancedPlayer();\n\n    @Override\n    public void play(String filename) {\n        if (filename.endsWith(\".mp4\")) advancedPlayer.playMp4(filename);\n        else if (filename.endsWith(\".mkv\")) advancedPlayer.playMkv(filename);\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Примеры Adapter в JDK\n\n- `Arrays.asList(array)` -- адаптирует массив к интерфейсу `List`\n- `InputStreamReader` -- адаптирует `InputStream` (байты) к `Reader` (символы)\n- `Collections.enumeration(collection)` -- адаптирует `Collection` к `Enumeration`\n\n### Adapter vs Facade\n\n| Критерий | Adapter | Facade |\n|----------|---------|--------|\n| Цель | Адаптировать один интерфейс к другому | Упростить сложную подсистему |\n| Количество классов | Работает с одним классом | Объединяет несколько классов |\n| Интерфейс | Преобразует существующий | Создаёт новый упрощённый |\n\n### Частые ошибки\n\n- Adapter с бизнес-логикой -- адаптер только преобразует интерфейс, не добавляет логику\n- Путать Adapter и Facade -- Adapter адаптирует один интерфейс к другому, Facade упрощает подсистему\n\n### Как используется в 2026\n\n- Spring: `HandlerAdapter` адаптирует разные типы контроллеров к единому `DispatcherServlet`\n- Интеграция legacy-систем -- адаптеры для старых API\n\n> **На собеседовании:** приведите пример из JDK (Arrays.asList, InputStreamReader) и объясните два типа адаптеров: Object Adapter (композиция, предпочтительнее) и Class Adapter (наследование). Частая ошибка -- путать Adapter с Facade.","","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]