introduire
Le mode adaptateur (adaptateur) consiste à convertir une interface (méthode ou attribut) d'une classe (objet) en une autre interface (méthode ou attribut) que le client souhaite. Le mode adaptateur permet aux classes (objets) qui n'ont pas pu travailler ensemble en raison de l'incompatibilité de l'interface. Emballage rapide.
texte
Donnons un exemple. Un canard (quai) a le comportement de vol (mouche) et de charlatan (charlatan), tandis qu'une dinde a également le comportement du vol (mouche), son son se passe. Si vous insistez pour mettre en œuvre l'action du charlatan (charlatan) de la Turquie, nous pouvons réutiliser la méthode de charlatan du canard, mais l'appel spécifique doit être charlatan. Pour le moment, nous pouvons créer un adaptateur de dinde afin que la Turquie prend également en charge la méthode de charlatan, et Gobble doit toujours être appelé en interne.
Ok, nous commençons à l'implémenter étape par étape. Tout d'abord, nous devons définir le comportement abstrait du canard et de la dinde, c'est-à-dire leur fonction de méthode respective:
La copie de code est la suivante:
//Canard
var Duck = function () {
};
Canard.prototype.fly = function () {
lancer une nouvelle erreur ("Cette méthode doit être réécrite!");
};
Duck.prototype.quack = fonction () {
lancer une nouvelle erreur ("Cette méthode doit être réécrite!");
}
//dinde
var Turkey = function () {
};
Turkey.prototype.fly = function () {
lancer une nouvelle erreur ("Cette méthode doit être réécrite!");
};
Turkey.prototype.gobble = fonction () {
lancer une nouvelle erreur ("Cette méthode doit être réécrite!");
};
Définissez ensuite les constructeurs spécifiques du canard et de la dinde, respectivement:
La copie de code est la suivante:
//Canard
var MallardDuck = function () {
Duck.Apply (ceci);
};
MallardDuck.prototype = new Duck (); // Le prototype est du canard
MallardDuck.prototype.fly = fonction () {
console.log ("peut voler sur une longue distance!");
};
MallardDuck.prototype.quack = fonction () {
console.log ("Gaga! Gaga!");
};
//dinde
var wildturkey = function () {
Turquie.Apply (ceci);
};
Wildturkey.prototype = New Turkey (); // Le prototype est la Turquie
Wildturkey.prototype.fly = function () {
console.log ("La distance volante semble être un peu courte!");
};
Wildturkey.prototype.gobble = function () {
console.log ("Gee! Gee!");
};
Pour faire en sorte que la Turquie prend en charge la méthode de charlatan, nous avons créé un nouvel adaptateur de dinde, TurkeyAdapter:
La copie de code est la suivante:
var TurkeyAdapter = function (oturkey) {
Duck.Apply (ceci);
this.oturkey = OTURKEY;
};
TurkeyAdapter.prototype = new Duck ();
TurkeyAdapter.prototype.quack = fonction () {
this.oturkey.gobble ();
};
TurkeyAdapter.prototype.fly = function () {
var nfly = 0;
var nlenfly = 5;
pour (; nfly <nlenfly;) {
this.oturkey.fly ();
nfly = nfly + 1;
}
};
Le constructeur prend un objet d'instance de Turquie, puis l'applique à l'aide de Duck, dont le prototype d'adaptateur est Duck, puis il veut rénover la méthode de charlatan de son prototype afin que la méthode Ourkey.gobble () soit appelée en interne. La méthode de la mouche a également apporté quelques modifications, permettant à la Turquie de voler 5 fois de suite (l'appel interne est également appelé sa propre méthode Ourkey.fly ()).
Appeler la méthode est très clair. Après les tests, vous saurez le résultat:
La copie de code est la suivante:
var omallardduck = new MallardDuck ();
var owildturkey = new WildTurkey ();
var OTURKEYADAPTER = New TurkeyAdapter (Owildturkey);
// Comportement de canard original
omallardduck.fly ();
omallardduck.quack ();
// Comportement original de la dinde
owildturkey.fly ();
owildturkey.gobble ();
// Comportement de la dinde adaptateur (Turquie appelle le nom de la méthode de canard)
OURKEYADAPTER.FLY ();
OURKEYADAPTER.QUACK ();
Résumer
Et si vous utilisez le mode adaptateur? Il est recommandé d'utiliser si:
1. Utilisez un objet existant, mais sa méthode ou l'interface d'attribut ne répond pas à vos exigences;
2. Vous souhaitez créer un objet réutilisable qui peut fonctionner avec d'autres objets non apparentés ou des objets invisibles (c'est-à-dire des objets incompatibles avec des méthodes ou des attributs d'interface);
3. Vous voulez utiliser un objet existant, mais vous ne pouvez pas prototyper chacun pour correspondre à son interface. Un adaptateur d'objet peut s'adapter à sa méthode ou à sa propriété d'interface d'objet parent.
De plus, le mode adaptateur et plusieurs autres modes peuvent être déroutants. Voici une différence générale:
1. Bien que l'adaptateur et le mode de pont soient similaires, le point de départ du pont est différent. Le but de Bridge est de séparer la partie d'interface et la partie de mise en œuvre, afin qu'ils puissent être modifiés plus facilement et relativement indépendamment. L'adaptateur signifie modifier une interface avec un objet existant.
2. Le mode décorateur améliore les fonctions d'autres objets sans modifier son interface, donc son programme correspondant est mieux transparent que l'adaptateur. Le résultat est que le décorateur prend en charge les combinaisons récursives, et il est impossible d'utiliser l'adaptateur uniquement.
3. Le mode proxy définit un proxy pour un autre objet sans modifier son interface.