introducir
El modo adaptador (adaptador) es convertir una interfaz (método o atributo) de una clase (objeto) en otra interfaz (método o atributo) que el cliente desea. El modo adaptador permite esas clases (objetos) que originalmente no pudieron trabajar juntos debido a la incompatibilidad de la interfaz. Envoltura rápida.
texto
Demos un ejemplo. Un pato (muelle) tiene el comportamiento de volar (mosca) y charlatanería (charlatán), mientras que un pavo también tiene el comportamiento de volar (mosca), su sonido es engullido. Si insiste en implementar la acción de Quack (Quack) de Turquía, entonces podemos reutilizar el método de Quack del pato, pero la llamada específica debe ser Quack. En este momento, podemos crear un adaptador de pavo para que Turquía también admite el método de Quack, y Gobble aún debería llamarse internamente.
Ok, comenzamos a implementarlo paso a paso. Primero, debemos definir el comportamiento abstracto de Duck y Turquía, es decir, sus respectivas funciones de método:
La copia del código es la siguiente:
//Pato
var duck = function () {
};
Duck.prototype.fly = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
};
Duck.prototype.quack = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
}
//pavo
var pavo = function () {
};
Turquía.prototype.fly = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
};
Turquía.prototype.gobble = function () {
arrojar un nuevo error ("Este método debe reescribirse!");
};
Luego defina los constructores específicos de Duck y Turquía, respectivamente:
La copia del código es la siguiente:
//Pato
var mallardDuck = function () {
Duck.apply (esto);
};
MallardDuck.prototype = new Duck (); // El prototipo es pato
Mallardduck.prototype.fly = function () {
console.log ("¡puede volar por una larga distancia!");
};
Mallardduck.prototype.quack = function () {
console.log ("Gaga! Gaga!");
};
//pavo
var wildturkey = function () {
Turquía.Aply (esto);
};
Wildturkey.prototype = new Turquía (); // El prototipo es Turquía
Wildturkey.prototype.fly = function () {
console.log ("La distancia de vuelo parece ser un poco corta!");
};
Wildturkey.prototype.gobble = function () {
console.log ("¡Dios!");
};
Para hacer que Turquía apoye el método Quack, creamos un nuevo adaptador de Turquía, TurkeyAdapter:
La copia del código es la siguiente:
var TurquíaDapter = function (oTurkey) {
Duck.apply (esto);
this.oturkey = oTurkey;
};
TurkeyAdapter.prototype = new Duck ();
TurkeyAdapter.prototype.quack = function () {
this.oturkey.gobble ();
};
TurkeyAdapter.prototype.fly = function () {
var nfly = 0;
var nlenfly = 5;
para (; nfly <nlenfly;) {
this.oturkey.fly ();
nfly = nfly + 1;
}
};
El constructor toma un objeto de instancia de Turquía, y luego lo aplica usando Duck, cuyo prototipo adaptador es Duck, y luego quiere volver a modificar el método de charlatanería de su prototipo para que el método Oturkey.gobble () se llame internamente. El método de mosca también ha realizado algunos cambios, permitiendo que el Turquía vuele 5 veces seguidas (la llamada interna también se llama su propio método oTurkey.fly ()).
Llamar al método es muy claro. Después de la prueba, sabrá el resultado:
La copia del código es la siguiente:
var omallardDuck = new MallarDDuck ();
var owildturkey = new WildTurkey ();
var oTurKeyAdapter = new TurkeyAdapter (OwildTurkey);
// Comportamiento original del pato
omallardDuck.fly ();
omallardDuck.quack ();
// Comportamiento original del pavo
owildturkey.fly ();
owildturkey.gobble ();
// Adaptador Comportamiento de Turquía (Turquía llama al nombre del método de pato)
oTurKeyAdapter.fly ();
oTurKeyAdapter.quack ();
Resumir
Entonces, ¿qué pasa si usa el modo adaptador? Se recomienda usar si:
1. Use un objeto existente, pero su método o interfaz de atributos no cumple con sus requisitos;
2. Desea crear un objeto reutilizable que pueda funcionar con otros objetos no relacionados o objetos invisibles (es decir, objetos que son incompatibles con métodos o atributos de interfaz);
3. Desea usar un objeto existente, pero no puede prototipos de cada uno para que coincida con su interfaz. Un adaptador de objeto puede adaptarse a su método o propiedad de interfaz de objeto principal.
Además, el modo adaptador y varios otros modos pueden ser confusos. Aquí hay una diferencia general:
1. Aunque el adaptador y el modo del puente son similares, el punto de partida del puente es diferente. El propósito del puente es separar la parte de la interfaz y la parte de implementación, para que puedan cambiarse de manera más fácil y relativamente independiente. El adaptador significa cambiar una interfaz con un objeto existente.
2. El modo decorador mejora las funciones de otros objetos sin cambiar su interfaz, por lo que su programa correspondiente es mejor transparente que el adaptador. El resultado es que el decorador admite combinaciones recursivas, y es imposible usar el adaptador puramente.
3. El modo proxy define un proxy para otro objeto sin cambiar su interfaz.