Evgenii Legotckoi
Evgenii Legotckoi21. September 2018 07:11

Strukturelle Entwurfsmuster - Adapter

Ziele

  1. Konvertieren einer Klassenschnittstelle in eine andere Schnittstelle. Ein Adapter ermöglicht die Zusammenarbeit von Klassen, die andernfalls auf inkompatible Klassenschnittstellen zurückzuführen wären.
  2. Umhüllen einer bestehenden Klasse in eine neue Schnittstelle
  3. Übereinstimmung der alten Komponente mit dem neuen System

Probleme

Eine vorgefertigte Komponente enthält alles, was Sie zum Entwickeln Ihres Systems benötigen, aber ihre Schnittstellen sind nicht mit den Schnittstellen Ihrer Anwendungsklassen kompatibel.


Diskussion

Die Wiederverwendung war schon immer schmerzhaft. Einer der Gründe war das Problem, etwas Neues zu schaffen und gleichzeitig etwas Altes wiederzuverwenden. Zwischen Alt und Neu stimmt immer etwas nicht oder ist nicht ganz kompatibel. Es könnten physikalische Dimensionen sein. Es könnte synchron sein. Dies können unglückliche Annahmen oder konkurrierende Standards sein.

Dies ähnelt dem Problem, einen neuen dreipoligen elektrischen Stecker in eine alte zweipolige Steckdose einzustecken – es wird eine Art Adapter oder Zwischenstück benötigt.

Ein Adapter ist eine Kreation einer Zwischenabstraktion, die eine alte Komponente in ein neues System übersetzt oder abbildet. Clients rufen Methoden für das Adapterobjekt auf, die sie zu Aufrufen an die geerbte Bean umleiten. Diese Strategie kann entweder mit Vererbung oder Aggregation implementiert werden.

Der Adapter fungiert als Wrapper oder Modifikator für eine vorhandene Klasse. Es bietet eine andere oder übersetzte Darstellung dieser Klasse.

Struktur

Unten erwartet die veraltete display() -Methode für die Rectangle-Komponente, die im Rectangle verwendet wird, den Empfang von „x, y, w, h“-Parametern. Aber der Client möchte "oben links x und y" und "unten rechts x und y" übergeben. Diese Inkonsistenz kann korrigiert werden, indem eine zusätzliche Abstraktionsebene hinzugefügt wird – d. h. ein Adapterobjekt.

Den Adapter kann man sich auch als „Wrapper“ vorstellen.

Beispiel

Das Adaptermuster ermöglicht es anderen inkompatiblen Klassen, zusammenzuarbeiten, indem es die Schnittstelle einer Klasse in die von Clients erwartete Schnittstelle umwandelt. Buchsen sind ein Beispiel für einen Adapter. Die Nuss wird an der Ratsche befestigt, vorausgesetzt, dass die Größe des Betätigers gleich ist. Typische Scheibengrößen in den USA sind 1/2" und 1/4". Offensichtlich passt eine 1/2-Zoll-Ratsche nicht in eine 1/4-Zoll-Stecknuss, es sei denn, es wird ein Adapter verwendet. Der 1/2" auf 1/4" Adapter hat eine 1/2" Buchse zur Montage an einem 1/2" Shaker und einen 1/4" Stecker zur Montage an einer 1/4" Buchse.

Kontrollliste

  1. Definieren Sie die Akteure: die Komponente(n), die Sie verwenden möchten (d. h. Client) und die Komponente, die Sie anpassen möchten (d. h. anpassbar).
  2. Bestimmen Sie die Schnittstelle, die der Client benötigt.
  3. Erstellen Sie eine "Wrapper"-Klasse, die "mit der Schnittstelle" des Clients übereinstimmen kann.
  4. Die Adapter/Wrapper-Klasse "hat" eine Instanz der anzupassenden Klasse.
  5. Die Adapter-/Wrapper-Klasse "bildet" die Client-Schnittstelle auf die angepasste Schnittstelle ab.
  6. Der Client verwendet eine neue Schnittstelle

Faustregeln

  • Adapter ermöglicht Klassen zu arbeiten, nachdem sie entworfen wurden; Die Brücke sorgt dafür, dass sie funktionieren, bevor sie entwickelt werden.
  • Die Brücke wird im Voraus so entworfen, dass sich Abstraktion und Implementierung unabhängig voneinander ändern. Der Adapter wird aktualisiert, sodass kollaborative Klassen zusammenarbeiten.
  • Ein Adapter bietet eine andere Schnittstelle zu seinem Objekt. Der Proxy bietet die gleiche Schnittstelle. Der Decorator bietet eine erweiterte Schnittstelle.
  • Der Adapter wurde entwickelt, um die Schnittstelle eines vorhandenen Objekts zu ändern. Ein Decorator verbessert die Leistung eines anderen Objekts, ohne dessen Schnittstelle zu ändern. Der Dekorateur ist somit für die Anwendung transparenter als der Adapter. Folglich unterstützt der Decorator die rekursive Komposition, was mit reinen Adaptern nicht möglich ist.
  • Fassade definiert eine neue Schnittstelle, während Adapter die alte Schnittstelle verwendet. Denken Sie daran, dass ein Adapter zwei vorhandene Schnittstellen unterstützt und keine völlig neue definiert.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken