introduzir
O modo adaptador (adaptador) deve converter uma interface (método ou atributo) de uma classe (objeto) em outra interface (método ou atributo) que o cliente deseja. O modo adaptador permite que as classes (objetos) originalmente não pudessem trabalhar juntos devido à incompatibilidade da interface. Invólucro rápido.
texto
Vamos dar um exemplo. Um pato (doca) tem o comportamento de voar (voar) e charlataning (charlatão), enquanto um peru também tem o comportamento de voar (voar), seu som é devorado. Se você insistir em implementar a ação do charlatão (charlatão) da Turquia, podemos reutilizar o método charlatão do pato, mas a chamada específica deve ser charlatana. Neste momento, podemos criar um adaptador de peru para que a Turquia também suporte o método do charté, e o GOBBLE ainda deve ser chamado internamente.
OK, começamos a implementá -lo passo a passo. Primeiro, devemos definir o comportamento abstrato do Duck and Turkey, ou seja, seu respectivo método funções:
A cópia do código é a seguinte:
//Pato
var pato = function () {
};
Pato.prototype.fly = function () {
lançar um novo erro ("Este método deve ser reescrito!");
};
Pato.prototype.quack = function () {
lançar um novo erro ("Este método deve ser reescrito!");
}
//peru
var Turkey = function () {
};
Turkey.prototype.fly = function () {
lançar um novo erro ("Este método deve ser reescrito!");
};
Turkey.prototype.gobble = function () {
lançar um novo erro ("Este método deve ser reescrito!");
};
Em seguida, defina os construtores específicos de pato e peru, respectivamente:
A cópia do código é a seguinte:
//Pato
var Mallardduck = function () {
Pato.Apply (isto);
};
Mallardduck.prototype = new Duck (); // O protótipo é pato
Mallardduck.prototype.fly = function () {
console.log ("pode voar por uma longa distância!");
};
Mallardduck.prototype.quack = function () {
console.log ("Gaga! Gaga!");
};
//peru
var wildturkey = function () {
Turkey.Apply (isto);
};
Wildturkey.prototype = new Turkey (); // O protótipo é Turquia
Wildturkey.prototype.fly = function () {
console.log ("A distância de vôo parece ser um pouco curta!");
};
Wildturkey.prototype.gobble = function () {
console.log ("gee! gee!");
};
Para fazer com que a Turquia apoie o método do charlatão, criamos um novo adaptador de peru, TurkeyAdapter:
A cópia do código é a seguinte:
var TurkeyAdapter = função (Oturkey) {
Pato.Apply (isto);
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;
}
};
O construtor pega um objeto de instância da Turquia e o aplica usando Duck, cujo protótipo adaptador é pato e, em seguida, ele quer re-modificar o método de charrasco do protótipo para que o método otorkey.gobble () seja chamado internamente. O método Fly também fez algumas alterações, permitindo que a Turquia voe 5 vezes seguida (a chamada interna também é chamada de seu próprio método oturkey.fly ()).
Chamar o método é muito claro. Após o teste, você saberá o resultado:
A cópia do código é a seguinte:
var omallardduck = new Mallardduck ();
var owildturkey = new WildTurkey ();
var oturkeyadapter = novo TurkeyAdapter (Owildturkey);
// Comportamento original do pato
omallardduck.fly ();
omallardduck.quack ();
// Comportamento original da Turquia
owildturkey.fly ();
owildturkey.gobble ();
// Adaptador Turquia Comportamento (a Turquia chama o nome do método do pato)
oturkeyadapter.fly ();
oturkeyadapter.quack ();
Resumir
E daí se você usar o modo adaptador? Recomenda -se usar se:
1. Use um objeto existente, mas seu método ou interface de atributo não atende aos seus requisitos;
2. Você deseja criar um objeto reutilizável que possa funcionar com outros objetos não relacionados ou objetos invisíveis (ou seja, objetos incompatíveis com métodos ou atributos de interface);
3. Deseja usar um objeto existente, mas você não pode prototipar cada um para corresponder à sua interface. Um adaptador de objeto pode se adaptar ao método ou propriedade da interface de objeto pai.
Além disso, o modo adaptador e vários outros modos podem ser confusos. Aqui está uma diferença geral:
1. Embora o adaptador e o modo de ponte sejam semelhantes, o ponto de partida da ponte é diferente. O objetivo da ponte é separar a parte da interface e a parte da implementação, para que possam ser alteradas com mais facilidade e relativamente independência. O adaptador significa alterar uma interface com um objeto existente.
2. O modo decorador aprimora as funções de outros objetos sem alterar sua interface; portanto, seu programa correspondente é melhor transparente que o adaptador. O resultado é que o decorador suporta combinações recursivas e é impossível usar o adaptador puramente.
3. O modo proxy define um proxy para outro objeto sem alterar sua interface.