Às vezes, durante o processo de desenvolvimento, descobriremos que as interfaces exigidas pelo cliente e as interfaces fornecidas são incompatíveis. Não podemos modificar a interface do cliente por razões especiais. Nesse caso, precisamos nos adaptar às interfaces existentes e às classes incompatíveis, que requer o modo adaptador. Com os adaptadores, podemos usá -los sem modificar o código antigo, que é a capacidade do adaptador.
O modo de adaptação pode ser usado para se adaptar entre uma interface existente e uma classe incompatível. Os objetos que usam esse modo também são chamados de invólucros porque estão envolvendo outro objeto com uma nova interface.
Na superfície, o modo adaptador é muito parecido com o modo de aparência. Todos eles precisam embrulhar outros objetos e alterar as interfaces que renderizam. A diferença entre os dois é como eles mudam a interface. O elemento de aparência apresenta uma interface simplificada que não fornece opções adicionais e, às vezes, faz algumas suposições para facilitar tarefas comuns. O adaptador converte uma interface para outra, que não filtra certos recursos e não simplificará a interface. Se a API do sistema do cliente não estiver disponível, será necessário um adaptador.
Teoria básica
Modo adaptador: converta uma interface em uma interface exigida pelo cliente sem modificar o código do cliente, para que o código incompatível possa funcionar juntos.
O adaptador consiste principalmente em 3 funções:
(1) Cliente: a classe que chama a interface
(2) Adaptador: classe usada para conectar a interface do cliente e a interface de fornecimento de serviços
(3) Adaptador: fornece serviços, mas é incompatível com os requisitos da interface do cliente.
Implementação do modo adaptador
1. O adaptador mais fácil
O modo adaptador não é tão complicado quanto você pensa, então vamos dar o exemplo mais simples.
O cliente chama um método para adição de cálculo:
var resultado = add (1,2);
No entanto, não fornecemos o método ADD e fornecemos o método da soma com a mesma função semelhante:
Função soma (v1, v2) {return v1 + v2;}Para evitar modificar o cliente e o servidor, adicionamos uma função de wrapper:
função add (v1, v2) {reutrn sum (v1, v2);}Este é o modo adaptador mais simples, adicionamos um método de wrapper entre duas interfaces incompatíveis e usamos esse método para conectar os dois para fazê -los trabalhar juntos.
2. Aplicação prática
Com o desenvolvimento de estruturas front-end, mais e mais desenvolvedores começaram a usar a estrutura do MVVM para o desenvolvimento, precisando apenas manipular dados sem elementos DOM, e o jQuery tem cada vez menos efeito. Muitos projetos ainda se referem à classe de ferramentas da biblioteca jQuery, porque precisamos usar o AJAX fornecido pelo jQuery para solicitar dados ao servidor. Se o papel de JQuery no projeto é usado apenas como biblioteca de ferramentas do Ajax, parece que é um pouco como matar uma galinha e causar desperdício de recursos. Neste momento, podemos encapsular completamente nossa própria biblioteca Ajax.
Suponha que o Ajax que encapsulamos seja usado por meio de uma função:
ajax ({url: '/getData', tipo: 'post', datatype: 'json', dados: {id: "123"}}). done (function () {})Exceto pela diferença entre a interface de chamada Ajax e o $ .ajax de JQuery, os outros são exatamente os mesmos.
Deve haver muitos lugares no projeto que solicitam Ajax. Quando substituímos o jQuery, não podemos modificar $ .ajax um por um. O que devemos fazer? Neste momento, podemos adicionar um adaptador:
var $ = {ajax: function (options) {return ajax (options); }}Isso será compatível com código antigo e novas interfaces, evitando modificações no código existente.
Resumir
O princípio do modo adaptador é muito simples, que é adicionar uma nova classe de wrapper para envolver a nova interface para se adaptar às chamadas do código antigo e evitar modificar a interface e chamar o código.
Cenários aplicáveis: existem muitas interfaces antigas de chamadas de código. Para evitar a modificação do código antigo e a substituição de novas interfaces, os cenários de aplicativos não afetam os métodos de implementação existentes.
1. Ocasões aplicáveis para o modo adaptador:
Os adaptadores são adequados para situações em que as interfaces esperadas pelo sistema de clientes são incompatíveis com as fornecidas pela API existente. Os dois métodos adaptados ao adaptador devem executar tarefas semelhantes, caso contrário, o problema não será resolvido. Assim como os elementos da ponte e os elementos da aparência, criando adaptadores, a abstração pode ser isolada de suas implementações para que os dois possam ser alterados independentemente.
2. Benefícios do modo adaptador:
Enrole a interface de uma classe existente com uma nova interface para que o programa do cliente possa usar esta classe que não é adaptada sem grande cirurgia.
3. Desvantagens do modo Orchestrator:
Algumas pessoas pensam que os adaptadores são uma sobrecarga desnecessária que pode ser evitada inteiramente reescrevendo o código existente. Além disso, o modo adaptador também introduzirá um lote de novas ferramentas que precisam ser suportadas. Se a API existente ainda não tiver moldada, ou a nova interface ainda não foi moldada, o adaptador nem sempre funcionará.
Suas vantagens tendem a se destacar mais do que suas desvantagens quando envolve grandes sistemas e estruturas herdadas.