einführen
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.
Text
Lassen Sie uns ein Beispiel geben. Eine Ente (Dock) hat das Verhalten von Fliegen (Fliegen) und Quacksalber (Quacksalber), während ein Truthahn auch das Verhalten des Fliegens (Fliege) hat, sein Klang ist verschlungen. Wenn Sie auf der Implementierung der Aktion von Quacksalber (Quacksalber) der Türkei bestehen, können wir die Quacksalbermethode der Ente wiederverwenden, aber der spezifische Anruf sollte Quacksalber sein. Zu diesem Zeitpunkt können wir einen Truthahnadapter erstellen, damit die Türkei auch die Quacksalbermethode unterstützt, und Gobble sollte immer noch intern aufgerufen werden.
Ok, wir beginnen, es Schritt für Schritt zu implementieren. Erstens müssen wir das abstrakte Verhalten von Enten und der Türkei definieren, dh ihre jeweiligen Methodenfunktionen:
Die Codekopie lautet wie folgt:
//Ente
var duck = function () {
};
Duck.Prototype.fly = function () {
Neuen Fehler werfen ("Diese Methode muss neu geschrieben werden!");
};
Duck.Prototype.quack = function () {
Neuen Fehler werfen ("Diese Methode muss neu geschrieben werden!");
}
//Truthahn
var turkey = function () {
};
Turkey.prototype.fly = function () {
Neuen Fehler werfen ("Diese Methode muss neu geschrieben werden!");
};
Turkey.prototype.gobble = function () {
Neuen Fehler werfen ("Diese Methode muss neu geschrieben werden!");
};
Definieren Sie dann die spezifischen Konstrukteure von Enten und der Türkei:
Die Codekopie lautet wie folgt:
//Ente
var mallardduck = function () {
Duck.Apply (dies);
};
MALLARDDUCK.PROTOType = new Duck (); // Der Prototyp ist Ente
MallardDuck.prototype.fly = function () {
console.log ("Kann für eine lange Strecke fliegen!");
};
MALLARDDUCK.PROTOTYPE.QUACK = FUNKTION () {
console.log ("gaga! gaga!");
};
//Truthahn
var wildTurkey = function () {
Türkei.Apply (dies);
};
WildTurkey.Prototype = neuer türkei (); // Der Prototyp ist die Türkei
Wildturkey.prototype.fly = function () {
console.log ("Die Flugdistanz scheint ein wenig kurz zu sein!");
};
Wildturkey.prototype.gobble = function () {
console.log ("Gee! Gee!");
};
Um die Quacksalbermethode zu unterstützen, haben wir einen neuen Truthahnadapter, Turkeyadapter, erstellt:
Die Codekopie lautet wie folgt:
var turkeyAdapter = function (oturkey) {
Duck.Apply (dies);
this.oturkey = oturkey;
};
TurkeyAdapter.Prototype = new Duck ();
TurkeyAdapter.prototype.quack = function () {
this.oturkey.gobble ();
};
TurkeyAdapter.prototype.fly = function () {
var nfly = 0;
var nlenfly = 5;
für (; nfly <nlenfly;) {
this.oturkey.fly ();
nfly = nfly + 1;
}
};
Der Konstruktor nimmt ein Instanzobjekt der Türkei ein und wendet ihn dann mit Enten an, dessen Adapterprototyp Ente ist, und dann möchte er die Quacksalbermethode seines Prototyps neu modifizieren, damit die Methode oturkey.gobble () intern aufgerufen wird. Die Fly -Methode hat auch einige Änderungen vorgenommen, sodass der Truthahn fünfmal hintereinander fliegen kann (der interne Anruf wird auch als eigene Oturkey.fly () -Methode bezeichnet).
Das Aufrufen der Methode ist sehr klar. Nach dem Testen werden Sie das Ergebnis kennen:
Die Codekopie lautet wie folgt:
var omallardduck = new MallardDuck ();
var owildturkey = new WildTurkey ();
var oturkeyAdapter = neuer türkeiadapter (owildturkey);
// Original Entenverhalten
omallardduck.fly ();
omallardduck.quack ();
// Original Truthahnverhalten
owildturkey.fly ();
owildturkey.gobble ();
// Adapter -Truthahnverhalten (Turkey nennt Entenmethodenname)
oturkeyadapter.fly ();
oturkeyadapter.quack ();
Zusammenfassen
Was ist, wenn Sie den Adaptermodus verwenden? Es wird empfohlen, wenn:
1. Verwenden Sie ein vorhandenes Objekt, aber seine Methode oder Attributschnittstelle entspricht nicht Ihren Anforderungen.
2. Sie möchten ein wiederverwendbares Objekt erstellen, das mit anderen nicht verwandten Objekten oder unsichtbaren Objekten arbeiten kann (d. H. Objekte, die mit Schnittstellenmethoden oder Attributen nicht kompatibel sind).
3.. Möchten Sie ein vorhandenes Objekt verwenden, aber Sie können jeweils nicht so prototypisieren, dass sie der Schnittstelle übereinstimmen. Ein Objektadapter kann sich an seine übergeordnete Objekt -Schnittstellenmethode oder Eigenschaft anpassen.
Zusätzlich können der Adaptermodus und mehrere andere Modi verwirrend sein. Hier ist ein allgemeiner Unterschied:
1. Obwohl der Adapter- und Brückenmodus ähnlich ist, ist der Startpunkt der Brücke unterschiedlich. Der Zweck der Brücke besteht darin, den Schnittstellenteil und den Implementierungsteil zu trennen, damit sie einfacher und relativ unabhängig geändert werden können. Der Adapter bedeutet, eine Schnittstelle mit einem vorhandenen Objekt zu ändern.
2. Der Dekoratormodus verbessert die Funktionen anderer Objekte, ohne seine Schnittstelle zu ändern, sodass sein entsprechendes Programm besser transparent ist als der Adapter. Das Ergebnis ist, dass der Dekorateur rekursive Kombinationen unterstützt, und es ist unmöglich, den Adapter nur zu verwenden.
3. Der Proxy -Modus definiert einen Proxy für ein anderes Objekt, ohne seine Schnittstelle zu ändern.