1. Visão geral
Padrão da cadeia de responsabilidade significa que vários objetos têm a oportunidade de processar a solicitação, evitando assim a relação de acoplamento entre o remetente e o receptor da solicitação. Conecte o objeto em uma corrente e passe a solicitação ao longo da corrente até que um objeto o line.
Parece ser o mesmo que a lista vinculada na estrutura de dados.
Mas não estrague tudo, a cadeia de responsabilidade não é igual a uma lista vinculada, porque a cadeia de responsabilidade pode ser pesquisada em qualquer nó, enquanto a lista vinculada deve ser pesquisada desde o nó inicial.
Por exemplo, os eventos borbulhantes no mecanismo de eventos DOM pertencem à cadeia de responsabilidades, enquanto os eventos capturados pertencem à lista vinculada.
2. Use a cadeia de responsabilidade para simular bolhas
Suponha que tenhamos três objetos: Li, Ul e Div. O diagrama de relacionamento dos três é o seguinte:
Por exemplo, quando acionamos o objeto LI, se Li não impedir bolhas, ele será passado para o objeto UL. Quando atingir a UL, se as bolhas não forem evitadas, ela será passada para o objeto Div (assumindo que a div é o nó raiz). Da mesma forma, Ul e Div.
Vendo isso, é muito claro que é adequado para escrever tais necessidades usando o modelo de cadeia de responsabilidade.
Mas, como usar o JavaScript para implementar o modelo de cadeia de responsabilidade?
Como segue, podemos construir a arquitetura básica através de cadeias de protótipo:
função criada (obj) {this.Next = obj || nulo;}; Createdom.prototype = {handle: function () {if (this.next) {this.next.Handle (); }}};Sempre que usamos o construtor criado para criar um objeto, passamos o objeto associado (bem, essa é uma lista muito vinculada).
Então, quando acionamos um objeto e executamos o método de manipulação, podemos seguir essa corrente e continuar.
No entanto, deve -se notar que, quando o atributo do identificador de um objeto cobre a alça na cadeia de protótipos, como você pode continuar a transmiti -lo?
Basta usar o criateom.prototype.handle.call (this);
Portanto, a implementação dos códigos LI, UL e Div são os seguintes:
var li = null, ul = null, div = null; div = new Createdom (); div.Handle = function (Stopbubble) {console.log ('div'); if (Stopbubble) {return; } else {CreateDom.prototype.handle.call (this); }}; ul = novo criado (div); ul.Handle = function (Stopbubble) {console.log ('ul'); if (Stopbubble) {return; } else {CreateDom.prototype.handle.call (this); }}; li = novo criado (ul); li.handle = function (stopbubble) {console.log ('li'); if (Stopbubble) {return; } else {CreateDom.prototype.handle.call (this); }};O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.