Descrição do modo decorador
Nota: Use uma classe para modificar dinamicamente os objetos funcionais de outra classe antes ou depois e adicione algumas funções extras; Esta é uma decoração das funções de um objeto de classe. A classe decorativa e a classe decorada requerem o mesmo método de interface de acesso (função). Em classes dinâmicas orientadas a objetos, a implementação geralmente é restringida pela implementação da mesma interface; A classe decorativa deve ter uma referência à classe decorada, usada para chamar os métodos de classe decorativa correspondentes na classe decorativa e depois modificá -la;
Exemplos de cenários:
1>. Por exemplo, quando usamos roupas em nossas vidas, uma camisa, uma jaqueta, um par de calças, uma gravata e um par de lindos sapatos de couro; Cada extra é uma decoração para a frente ou todo o corpo;
2>. Por exemplo, temos um método de função em uma classe que pode ser usada para gravar logs, que podem ser usados para os usuários efetuarem login em tal função. Talvez precisemos obter as informações atuais do operador antes de escrever o log ou escrever um log após o login com sucesso; As operações adicionais antes de escrever o log são geralmente o objetivo de escrever logs; Escrever o log após o log com sucesso também é geralmente as informações de operação do processo de log;
Portanto, o modo decorador é usado para implementar e os dois operam da mesma forma; É a expansão do decorador do objeto funcional do decorador, que é essencialmente a mesma faixa funcional do método original;
Código fonte da instância
1. Categoria decorada
A cópia do código é a seguinte:
função wear () {
}
Wear.prototype.shirt = function () {
// Use uma camisa
console.log ('use uma camisa');
}
2. Decoradores
A cópia do código é a seguinte:
Decorador da função (desgaste) {
this.wear = desgaste;
}
Decorator.prototype.shirt = function () {
this.wear.shirt ();
// Depois de usar uma camisa, eu coloquei uma gravata novamente
}
3. Como usar
A cópia do código é a seguinte:
var desgaste = novo desgaste ();
var decorador = novo decorador (desgaste);
decorator.shirt ();
Isso permite uma decoração dinâmica estendida do objeto de função de camisa de desgaste. Você não precisa saber como o método decorativo original é realizado. Apenas saiba qual é a sua função e, em seguida, saiba qual é a função adicional que queremos adicionar a ela;
Outras instruções
O padrão do decorador realmente retira o método orientado a objetos: o princípio de se abrir para extensões e fechar para modificações; Todos os métodos funcionais desejados são realizados sem modificar o [desgaste da classe decorado] e estender o [decorador de classe do decorador];
Uma característica principal do modelo decorador é que a referência do decorador ao decorador para obter decoração não modificada do decorador;
Simulação: cena de usar uma camisa primeiro, depois uma gravata e depois um terno: o decorador acima permanece inalterado:
2. Decoradores:
A cópia do código é a seguinte:
Decorador da função (desgaste) {
this.wear = desgaste;
}
Decorator.prototype.shirt = function () {
this.wear.shirt (); // Só use camisas aqui;
}
3. Crie classes de vestir e vestir de terno semelhantes a herdar a subclasse decoradora
A cópia do código é a seguinte:
função decorator_tie (decorador) {
this.Decorator = decorador;
}
Decorator_tie.prototype.shirt = function () {
this.Decorator.shirt (); // Use uma camisa
console.log ('use uma gravata novamente');
}
função decorator_western (decorador) {
this.Decorator = decorador;
}
Decorator_western.prototype.shirt = function () {
this.Decorator.shirt ();
console.log ('use um terno novamente');
}
Como usar:
A cópia do código é a seguinte:
// coloque sua camisa primeiro
var desgaste = novo desgaste ();
var decorador = novo decorador (desgaste);
//decorator.shirt ();
// use uma gravata novamente
var tie = new decorator_tie (decorador);
//tie.shirt ();
// coloque um terno novamente
var western = new decorator_western (tie);
western.shirt ();
Este é um exemplo simulado de vestir e decorar;