La idea principal del patrón de diseño de Cadena de Responsabilidad es construir una cadena de unidades de procesamiento, cada unidad maneja la solicitud si se satisface el umbral. Dado que se construye una cadena, si una unidad no está satisfecha, se probará la siguiente unidad, y así sucesivamente. Cada solicitud se procesará a lo largo de la cadena.
Diagrama de clases de cadena de responsabilidad
Cadena de responsabilidad Código Java
package designpatterns.cor; abstract class Chain { public static int One = 1; public static int Two = 2; public static int Three = 3; protected int Threshold; protected Chain next; public void setNext(Chain chain) { next = chain; } public void message(String msg, int priority) { //if the priority is less than Threshold it is handled if (priority <= Threshold) { writeMessage(msg); } if (next != null) { next.message(msg, priority); } } abstract protected void writeMessage(String msg); } class A extends Chain { public A(int threshold) { this.Threshold = threshold; } protected void writeMessage(String msg) { System.out.println("A: " + msg); } } class B extends Chain { public B(int threshold) { this.Threshold = threshold; } protected void writeMessage(String msg) { System.out.println("B: " + msg); } } class C extends Chain { public C(int threshold) { this.Threshold = threshold; } protected void writeMessage(String msg) { System.out.println("C: " + msg); } } public class ChainOfResponsibilityExample { private static Chain createChain() { // Build the chain of responsibility Chain chain1 = new A(Chain.Three); Chain chain2 = new B(Chain.Two); chain1.setNext(chain2); Chain chain3 = new C(Chain.One); chain2.setNext(chain3); return chain1; } public static void main(String[] args) { Chain chain = createChain(); chain.message("level 3", Chain.Three); chain.message("level 2", Chain.Two); chain.message("level 1", Chain.One); } } |
En este ejemplo, el nivel 1 pasa por todas las unidades de la cadena.
A: nivel 2
B: nivel 2
A: nivel 1
B: nivel 1
C: nivel 1
Este ejemplo está simplificado de Wiki – http://en.wikipedia.org/wiki/Chain-of-responsibility_pattern
Patrón de cadena de responsabilidad utilizado en Java JDK