1. Descripción general
Patrón de cadena de responsabilidad significa que múltiples objetos tienen la oportunidad de procesar la solicitud, evitando así la relación de acoplamiento entre el remitente y el receptor de la solicitud. Conecte el objeto en una cadena y pase la solicitud a lo largo de la cadena hasta que un objeto lo maneje.
Parece ser lo mismo que la lista vinculada en la estructura de datos.
Pero no lo arruine, la cadena de responsabilidad no es igual a una lista vinculada, porque la cadena de responsabilidad se puede buscar en cualquier nodo, mientras que la lista vinculada debe buscarse desde el nodo inicial.
Por ejemplo, los eventos burbujeantes en el mecanismo del evento DOM pertenecen a la cadena de responsabilidades, mientras que los eventos capturados pertenecen a la lista vinculada.
2. Use la cadena de responsabilidad para simular burbujas
Supongamos que tenemos tres objetos: Li, Ul y Div. El diagrama de relaciones de los tres es el siguiente:
Por ejemplo, cuando activamos el objeto Li, si Li no evita burbujas, se pasará al objeto UL. Cuando llega a UL, si no se evitan las burbujas, se pasará al objeto Div (suponiendo que el DIV es el nodo raíz). Del mismo modo, Ul y Div.
Al ver esto, está muy claro que es adecuado para escribir tales necesidades utilizando el modelo de cadena de responsabilidad.
Pero, ¿cómo usar JavaScript para implementar el modelo de cadena de responsabilidad?
De la siguiente manera, podemos construir la arquitectura básica a través de cadenas prototipo:
Función creationom (obj) {this.next = obj || nulo;}; Createom.prototype = {handle: function () {if (this.next) {this.next.handle (); }}};Cada vez que usamos el constructor CreateOM para crear un objeto, pasamos el objeto asociado en (bueno, esta es una lista muy vinculada).
Luego, cuando activamos un objeto y ejecutamos el método de identificación, podemos seguir esta cadena y continuar.
Sin embargo, debe tenerse en cuenta que cuando el atributo del mango de un objeto cubre el mango en la cadena prototipo, ¿cómo puede continuar pasando hacia abajo?
Solo use createom.prototype.handle.call (this);
Entonces, los códigos de implementación de Li, UL y DIV son los siguientes:
var li = null, ul = null, div = null; div = new createom (); div.handle = function (stopbubble) {console.log ('div'); if (stopbubble) {return; } else {createom.prototype.handle.call (this); }}; ul = new Createom (div); ul.handle = function (stopbubble) {console.log ('ul'); if (stopbubble) {return; } else {createom.prototype.handle.call (this); }}; li = new Createom (ul); li.handle = function (stopbubble) {console.log ('li'); if (stopbubble) {return; } else {createom.prototype.handle.call (this); }};Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.