Сервис для
сео - оптимизаторов

Найди ошибки на сайте
Ошибки мешают продвижению сайта
Исправь ошибки на сайте
Сайт без ошибок продвигать легче
Получи новых клиентов
Новые клиенты принесут больше прибыль

Шаблон проектирования адаптера в Java

  1. Шаблон двухстороннего адаптера
  2. Шаблон проектирования адаптера - адаптер класса
  3. Шаблон проектирования адаптера - реализация адаптера объекта
  4. Диаграмма классов шаблона проектирования адаптера
  5. Пример шаблона дизайна адаптера в JDK
  6. О Панкадж

адаптер шаблон дизайна является одним из шаблонов структурного проектирования и используется таким образом, что два несвязанных интерфейса могут работать вместе. Объект, который присоединяется к этим несвязанным интерфейсам, называется адаптером .

Одним из замечательных примеров использования адаптера в реальной жизни является мобильное зарядное устройство
Одним из замечательных примеров использования адаптера в реальной жизни является мобильное зарядное устройство. Мобильной батарее для зарядки требуется 3 В, но обычная розетка выдает напряжение 120 В (США) или 240 В (Индия). Таким образом, мобильное зарядное устройство работает в качестве адаптера между мобильной зарядной розеткой и сетевой розеткой.

В этом уроке мы попытаемся реализовать мультиадаптер с использованием шаблона проектирования адаптера.

Итак, прежде всего у нас будет два класса - Вольт (для измерения вольт) и Гнездо (производящий постоянное напряжение 120 В).


копия

пакет com.journaldev.design.adapter; открытый класс Volt {private int volts; public Volt (int v) {this.volts = v; } public int getVolts () {return volts; } public void setVolts (int volts) {this.volts = volts; }}
копия

пакет com.journaldev.design.adapter; открытый класс Socket {public Volt getVolt () {return new Volt (120); }}

Теперь мы хотим создать адаптер, который может выдавать 3 вольт, 12 вольт и по умолчанию 120 вольт. Итак, прежде всего мы создадим интерфейс адаптера с этими методами.


копия

пакет com.journaldev.design.adapter; открытый интерфейс SocketAdapter {public Volt get120Volt (); public Volt get12Volt (); public Volt get3Volt (); }

Шаблон двухстороннего адаптера

При реализации шаблона адаптера существует два подхода - адаптер класса и адаптер объекта - однако оба эти подхода дают один и тот же результат.

  1. Class Adapter - эта форма использует наследование Java и расширяет интерфейс источника, в нашем случае класс Socket.
  2. Object Adapter - эта форма использует Java Композиция Адаптер содержит исходный объект.

Шаблон проектирования адаптера - адаптер класса

Вот реализация подхода адаптера класса нашего адаптера.


копия

пакет com.journaldev.design.adapter; // Использование наследования для шаблона адаптера открытый класс SocketClassAdapterImpl расширяет Socket реализует SocketAdapter {@Override public Volt get120Volt () {return getVolt (); } @Override public Volt get12Volt () {Volt v = getVolt (); return convertVolt (v, 10); } @Override public Volt get3Volt () {Volt v = getVolt (); return convertVolt (v, 40); } private Volt convertVolt (Volt v, int i) {вернуть новый Volt (v.getVolts () / i); }}

Шаблон проектирования адаптера - реализация адаптера объекта

Вот реализация нашего адаптера объекта .


копия

пакет com.journaldev.design.adapter; открытый класс SocketObjectAdapterImpl реализует SocketAdapter {// Использование композиции для шаблона адаптера private Socket sock = new Socket (); @Override public Volt get120Volt () {return sock.getVolt (); } @Override public Volt get12Volt () {Volt v = sock.getVolt (); return convertVolt (v, 10); } @Override public Volt get3Volt () {Volt v = sock.getVolt (); return convertVolt (v, 40); } private Volt convertVolt (Volt v, int i) {вернуть новый Volt (v.getVolts () / i); }}

Обратите внимание, что обе реализации адаптера практически одинаковы, и они реализуют интерфейс SocketAdapter. Интерфейс адаптера также может быть абстрактный класс ,

Вот тестовая программа, которая использует нашу реализацию шаблона проектирования адаптера.


копия

пакет com.journaldev.design.test; import com.journaldev.design.adapter.SocketAdapter; import com.journaldev.design.adapter.SocketClassAdapterImpl; import com.journaldev.design.adapter.SocketObjectAdapterImpl; import com.journaldev.design.adapter.Volt; открытый класс AdapterPatternTest {открытый статический void main (String [] args) {testClassAdapter (); testObjectAdapter (); } private static void testObjectAdapter () {SocketAdapter sockAdapter = new SocketObjectAdapterImpl (); Volt v3 = getVolt (sockAdapter, 3); Volt v12 = getVolt (sockAdapter, 12); Volt v120 = getVolt (sockAdapter, 120); System.out.println ("v3 вольт с использованием Object Adapter =" + v3.getVolts ()); System.out.println ("v12 вольт с использованием Object Adapter =" + v12.getVolts ()); System.out.println ("v120 вольт с использованием Object Adapter =" + v120.getVolts ()); } private static void testClassAdapter () {SocketAdapter sockAdapter = new SocketClassAdapterImpl (); Volt v3 = getVolt (sockAdapter, 3); Volt v12 = getVolt (sockAdapter, 12); Volt v120 = getVolt (sockAdapter, 120); System.out.println ("v3 вольт с использованием Class Adapter =" + v3.getVolts ()); System.out.println ("v12 вольт с использованием Class Adapter =" + v12.getVolts ()); System.out.println ("v120 вольт с использованием Class Adapter =" + v120.getVolts ()); } частный статический Volt getVolt (SocketAdapter sockAdapter, int i) {switch (i) {case 3: return sockAdapter.get3Volt (); случай 12: вернуть sockAdapter.get12Volt (); case 120: вернуть sockAdapter.get120Volt (); по умолчанию: return sockAdapter.get120Volt (); }}}

Когда мы запускаем тестовую программу выше, мы получаем следующий вывод.


копия

v3 вольт, используя Class Adapter = 3 v12 вольт, используя Class Adapter = 12 v120 вольт, используя Class Adapter = 120 v3 вольт, используя Object Adapter = 3 v12 вольт, используя Object Adapter = 12 v120 вольт, используя Object Adapter = 120

Диаграмма классов шаблона проектирования адаптера

Диаграмма классов шаблона проектирования адаптера

Пример шаблона дизайна адаптера в JDK

Вот некоторые из примеров шаблонов проектирования адаптеров, которые я легко мог найти в классах JDK;

  • java.util.Arrays # asList ()
  • java.io.InputStreamReader (InputStream) (возвращает читателя)
  • java.io.OutputStreamWriter (OutputStream) (возвращает Writer)

Это все для шаблона дизайна адаптера в Java.

Это все для шаблона дизайна адаптера в Java

О Панкадж

Я люблю технологии с открытым исходным кодом и пишу о своем опыте, связанном с ними. Вы можете связаться со мной напрямую на facebook , щебет , а также YouTube ,

Похожие

2 адаптера USB-C, которые стоит рассмотреть для вашего Chromebook
... адаптерами. Сегодня все чаще Chromebook, как и ноутбуки в целом, все больше отдаляется от модели изобилие портов и вместо этого предоставляет нам лишь небольшое количество портов USB-C для удовлетворения всех наших потребностей в физическом подключении. Это правда с Google Pixelbook , который имеет один порт USB-C на любой из двух сторон и ничего более, за исключением разъема
Сайт недоступен
... веб-хостинга мирового класса. Наше видение заключается в том, чтобы позволить миллионам людей во всем мире раскрыть возможности Интернета и дать им возможность учиться, творить и расти. Выберите свой план веб-хостинга 1 веб-сайт 1 учетная запись электронной почты Пропускная способность 100 ГБ 1X вычислительная мощность и память Неограниченное количество сайтов Неограниченные
Сравнительный тест: комплекты безопасности
Поскольку мы вступили в период, когда наша цифровая жизнь нарушается как криминальными, так и другими элементами, хорошая защита чрезвычайно важна. Вопрос в том, примут ли современные вызовы безопасности. В ТЕСТЕ: Bitdefender - Полная безопасность 2018 F-Secure - полная безопасность и конфиденциальность Касперский - Тотальная безопасность Нортон - Премиум безопасности 22.10.1.10
Что такое уязвимость, связанная с инъекцией команд?
Зачем веб-приложениям выполнять системные команды? Иногда веб-приложения выполняют команды ОС (команды операционной системы) для связи с базовой операционной системой хоста и файловой системой. Это происходит при размещении веб-приложений под любой операционной системой, включая Windows, Unix и Linux. Это может быть либо запуск системных команд, либо запуск приложений,
сайт недоступен
Hostinger на карте мира Хостинг-платформа мирового класса. Наша цель в том, чтоб позволить миллионам людей по всему миру использовать мощности интернета и ПРЕДОСТАВИТЬ им возможность учиться, создавать и расти. Выбирайте Свой Тариф Хостинга простой Хостинг 175,00 ₴ Экономия 89% 1 сайт 1 Email аккаунт 100 ГБ Трафик 1X Мощность процессор и память
WiFi Альфа USB WiFi адаптер AWUS036H рекомендуется в 2017 году с Windows 10>
... адаптера WiFI, является Windows 7, но установка в Windows 8 и Windows 10 очень проста и работает абсолютно стабильно, мы можем рекомендовать этот адаптер WiFi AWUS036H в 2017 году для некоторых конкретных целей, что результат будет выше, чем у других более современных карт. Рекомендация в этом обзоре этой карты Wi-Fi с чипом RTL8187L для Windows основана на том, что начиная с Windows 7 все последующие версии Windows допускают совместимость с драйверами Windows 7 или более ранними версиями.
10 веб-дизайнеров, которых вы должны встретить.
... в свободен от политических паритетов. Это естественно регулирует себя. В мире дизайна одежды женщины издавна были гигантами индустрии. Тем не менее, в молодой дизайнерской среде не так много женщин, и на горизонте появляются персонажи, которые могут стать символами индустрии Коко Шанель. Обязательно стоит ознакомиться с их проектами и оценить их работу. Откройте для себя красивый дизайн сайта современного Интернета. Не удивительно, что существует огромная диспропорция
Как создать успешный сайт, который привлекает миллионы посетителей!
За прошедшие годы тысячи людей спросили нас, как мы создали этот веб-сайт и как они могут создать свой собственный. Сегодня я хотел бы поделиться с вами простой стратегией, которую мы используем для создания наших веб-сайтов, привлечения миллионов посетителей и получения дохода на автопилоте. Наши методы доказали свою успешную работу во многих отраслях для нас и для других людей. В некотором смысле вы можете рассмотреть то, что я собираюсь поделиться с вами, свой собственный план создания
Что такое уязвимость, связанная с инъекцией команд?
Зачем веб-приложениям выполнять системные команды?