0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>В<strong>структурных шаблонах</strong>проектирования рассматривается вопрос о том, каким образом из классов и объектов формируются более крупные структуры. Иными словами, структурные шаблоны, как правило, связаны с композицией объектов и с тем, как именно сущности могут использовать друг друга. По сути, они помогают узнать ответ на вопрос "Как создать программный компонент?" Один из таких шаблонов - "<strong>Адаптер</strong>" (<strong>Adapter</strong>).</p>
1
<p>В<strong>структурных шаблонах</strong>проектирования рассматривается вопрос о том, каким образом из классов и объектов формируются более крупные структуры. Иными словами, структурные шаблоны, как правило, связаны с композицией объектов и с тем, как именно сущности могут использовать друг друга. По сути, они помогают узнать ответ на вопрос "Как создать программный компонент?" Один из таких шаблонов - "<strong>Адаптер</strong>" (<strong>Adapter</strong>).</p>
2
<p><strong>Адаптер</strong>- это структурный шаблон проектирования, применяемый для организации использования функций объекта, который недоступен для модификации, причем для этого задействуется специально созданный интерфейс.</p>
2
<p><strong>Адаптер</strong>- это структурный шаблон проектирования, применяемый для организации использования функций объекта, который недоступен для модификации, причем для этого задействуется специально созданный интерфейс.</p>
3
<p>Давайте представим, что на карте памяти существуют фотографии, которые мы хотим перенести на наш ПК. Чтобы выполнить данную задачу, понадобится некий адаптер, совместимый с портами персонального компьютера. К примеру, пусть адаптером будет карт-ридер. Или же давайте вспомним ситуацию, когда в обычную розетку советских времен нельзя было вставить вилку, в простонародье именуемую "евро". Проблема решалась как установкой новых розеток, соответствующих евростандарту, так и более простым способом, который заключался в применении простейшего переходника. Ну и в качестве более понятного примера можно привести опытного переводчика, который обеспечивает коммуникацию между двумя людьми, не понимающими друг друга без посторонней помощи.</p>
3
<p>Давайте представим, что на карте памяти существуют фотографии, которые мы хотим перенести на наш ПК. Чтобы выполнить данную задачу, понадобится некий адаптер, совместимый с портами персонального компьютера. К примеру, пусть адаптером будет карт-ридер. Или же давайте вспомним ситуацию, когда в обычную розетку советских времен нельзя было вставить вилку, в простонародье именуемую "евро". Проблема решалась как установкой новых розеток, соответствующих евростандарту, так и более простым способом, который заключался в применении простейшего переходника. Ну и в качестве более понятного примера можно привести опытного переводчика, который обеспечивает коммуникацию между двумя людьми, не понимающими друг друга без посторонней помощи.</p>
4
<p>Таким образом,<strong>шаблон "Адаптер" дает возможность оборачивать несовместимые объекты в адаптер с целью сделать их совместимыми с другим классом</strong>.</p>
4
<p>Таким образом,<strong>шаблон "Адаптер" дает возможность оборачивать несовместимые объекты в адаптер с целью сделать их совместимыми с другим классом</strong>.</p>
5
<h2>Как это выглядит в коде</h2>
5
<h2>Как это выглядит в коде</h2>
6
<p>Допустим, мы разрабатываем игру, где охотник охотится на львов.</p>
6
<p>Допустим, мы разрабатываем игру, где охотник охотится на львов.</p>
7
<p>Поначалу у нас есть интерфейс<em>Lion</em>, реализующий всех львов:</p>
7
<p>Поначалу у нас есть интерфейс<em>Lion</em>, реализующий всех львов:</p>
8
<p>На любую реализацию Lion-интерфейса охотится<em>Hunter</em>:</p>
8
<p>На любую реализацию Lion-интерфейса охотится<em>Hunter</em>:</p>
9
<p>Теперь представьте, что надо добавить в игру<em>WildDog</em>, чтобы<em>Hunter _смог охотиться и на нее. Но сделать это напрямую нельзя, ведь _WildDog</em>-- это другой интерфейс. Для обеспечения совместимости нам и пригодится адаптер:</p>
9
<p>Теперь представьте, что надо добавить в игру<em>WildDog</em>, чтобы<em>Hunter _смог охотиться и на нее. Но сделать это напрямую нельзя, ведь _WildDog</em>-- это другой интерфейс. Для обеспечения совместимости нам и пригодится адаптер:</p>
10
<p>Осталось рассмотреть способ применения:</p>
10
<p>Осталось рассмотреть способ применения:</p>
11
<p>Также вам может быть интересен пример на<strong>Java</strong>: https://github.com/iluwatar/java-design-patterns/tree/master/adapter.</p>
11
<p>Также вам может быть интересен пример на<strong>Java</strong>: https://github.com/iluwatar/java-design-patterns/tree/master/adapter.</p>
12
<p><em>По материалам статьи "Design Patterns for Humans" - https://github.com/kamranahmedse/design-patterns-for-humans.</em></p>
12
<p><em>По материалам статьи "Design Patterns for Humans" - https://github.com/kamranahmedse/design-patterns-for-humans.</em></p>
13
13