Definition
Der Adaptermodus (Adapter) besteht darin, eine Schnittstelle (Methode oder Attribut) einer Klasse (Objekt) in eine andere Schnittstelle (Methode oder Attribut) umzuwandeln, die der Kunde will. Der Adaptermodus ermöglicht diese Klassen (Objekte), die aufgrund der Inkompatibilität der Schnittstelle ursprünglich nicht zusammenarbeiten konnten. Schnelle Wrapper.
Der Alias für den Adapter ist eine Wrapper, die ein relativ einfaches Muster ist. Es gibt viele solcher Szenarien in der Programmentwicklung: Wenn wir versuchen, eine Schnittstelle eines Moduls oder Objekts aufzurufen, stellen wir fest, dass das Format dieser Schnittstelle nicht den aktuellen Anforderungen entspricht. Zu diesem Zeitpunkt gibt es zwei Lösungen. Die erste besteht darin, die ursprüngliche Schnittstellenimplementierung zu ändern. Wenn das ursprüngliche Modul jedoch sehr kompliziert ist oder das von uns erhaltene Modul ein komprimierter Code von einer anderen Person ist, ist die Änderung der ursprünglichen Schnittstelle unrealistisch. Die zweite Methode besteht darin, einen Adapter zu erstellen und die ursprüngliche Schnittstelle in eine andere Schnittstelle umzuwandeln, die der Kunde will. Der Kunde muss sich nur mit dem Adapter befassen.
Warum müssen Sie den Adaptermodus verwenden?
Bei der Entwicklung einer Anwendung müssen Sie häufig einen Teil davon ersetzen, z. B. eine Bibliothek, mit der Sie Protokolle oder ähnliche Inhalte enthalten. Wenn Sie es durch eine neue Bibliothek ersetzen, ist es unwahrscheinlich, dass die neue Bibliothek genau über die gleiche Schnittstelle verfügt. Von hier aus haben Sie zwei Optionen:
(1) Überprüfen Sie den gesamten Code und ändern Sie den gesamten Code, der auf die alte Bibliothek zeigt.
(2) Erstellen Sie einen Adapter, damit die neue Bibliothek dieselbe Schnittstelle wie die alte Bibliothek verwenden kann.
Wenn Ihre Bewerbung in einigen Fällen gering ist oder nur wenige Verweise auf die alte Bibliothek gibt, ist es offensichtlich angemessener, den vollständigen Code zu überprüfen und ihn so zu ändern, dass sie mit der neuen Bibliothek übereinstimmen, anstatt eine neue Abstraktionsebene hinzuzufügen, um den Code komplizierter zu gestalten. In den meisten Fällen ist die Erstellung eines Adapters jedoch praktischer und zeitsparender.
Beispiele für JavaScript -Code
Wenn etwas passieren kann, wird es definitiv passieren. Schauen wir uns zunächst diesen kleinen LoggerFactory an, mit dem wir die Protokollschnittstelle, die wir einfacher verwenden, ändern können.
var loggerfactory = {getLogger: function () {return window.console; }.Wenn wir GetLogger anrufen, gibt es uns das Konsolenobjekt (Konsole) zurück. Für diese Übung tun wir so, als hätte das Konsolenobjekt nur eine Methode - Protokoll und kann nur einen String -Typ -Parameter empfangen. Als nächstes haben wir eine andere Protokollschnittstelle, die komplizierter sein wird, weil 1) es in JavaScript implementiert ist, im Gegensatz zur Konsole, die nicht der Browser selbst ist. 2) Es wird die Protokolle über AJAX an den Server gesendet, was auch bedeutet, dass wir die URL -Daten codieren müssen (der Code implementiert nicht spezifisch URL -codierende Angelegenheiten, da er nichts mit dem Adaptermuster zu tun hat, über das wir sprechen möchten). Natürlich wird es eine andere Schnittstelle von der Konsole verwenden.
var ajaxLogger = {sendLog: function () {var data = this.urlenCode (Argumente); jQuery.ajax ({url: "http://example.com/log", Daten: Daten}); }, urlencode: function (arg) {... return codedData; }, ...};Wir haben die AJAX -Anfragen von JQuery verwendet, um Zeit zu sparen und Dinge zu ignorieren, die wir nicht mit dem Adaptermodus tun möchten. Wir müssen jetzt einen Adapter erstellen und den vorherigen Loggerfakktor ändern, um diesen Adapter anstelle des Konsolenobjekts zurückzugeben.
var ajaxLoggeradapter = {log: function (arg) {ajaxLogger.sendlog (arg); }};/ * LoggerFactory anpassen */var loggerfactory = {getLogger: function () {// Ändern Sie den Rückgabewert return ajaxLoggeradapter; }, ...};Wir haben nur eine Zeile von Änderungen am vorhandenen Code vorgenommen, und das gesamte Programm kann diese neue Protokollschnittstelle verwenden.
Komplexer Adapter
Die Protokollschnittstelle ist ein sehr einfaches Beispiel. Es hat nur eine Methode, und es ist nicht schwierig, es direkt der alten Methode zuzuordnen. Dies ist in den meisten Fällen nicht der Fall. Sie können auf das Problem stoßen, dass die Parameter dieser zugeordneten Funktionen völlig unterschiedlich sind und die alte Schnittstelle diese Parameter möglicherweise überhaupt nicht enthält, und Sie müssen sich selbst mit ihnen umgehen. In einigen Fällen müssen Sie einige Parameter löschen, da neue Schnittstellen sie überhaupt nicht verwenden. Wenn die Schnittstellenzuordnung zwischen zwei Objekten zu schwierig ist, müssen wir trotzdem an andere Wege denken, ich möchte Tausende von alten Codezeilen nicht finden und ändern.