Mostrando entradas con la etiqueta Patrones de Comportamiento. Mostrar todas las entradas
Mostrando entradas con la etiqueta Patrones de Comportamiento. Mostrar todas las entradas

lunes, 19 de noviembre de 2007

Patrón de Diseño, Chain of Responsibility

Evita acoplamiento al remitente de una petición a su receptor dando la posibilidad de un objeto de tramitar la solicitud. Cadena de la recepción de los objetos y pasar la solicitud a lo largo de la cadena hasta que un objeto se ocupa de él.

Este Patron es muy poco usado.



Participantes

Las clases y / o de los objetos que participan en este modelo son:

* Handler
Define una interfaz para el manejo de las solicitudes
(Opcional) implementa el sucesor enlace
* ConcreteHandler
Se ocupa de las solicitudes que es responsable
Puede acceder a su sucesor
Si el ConcreteHandler puede tramitar la solicitud, lo hace; de otra forma, lo que remite la solicitud a su sucesor
* Client
Inicia la petición a un ConcreteHandler objeto en la cadena













Puedes bajar el ejemplo y probarlo en tu pc. Fue desarrollado en Eclipse con Java 1.6SE
[descargar]

Este es el codigo Java,

abstract class Handler{

protected Handler successor;


public void SetSuccessor(Handler successor){
this.successor = successor;
}

public abstract void HandleRequest(int request);
}

class ConcreteHandler1 extends Handler{
public void HandleRequest(int request){
if (request >= 0 && request < 10){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}

class ConcreteHandler2 extends Handler{
public void HandleRequest(int request) {
if (request >= 10 && request < 20){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}

class ConcreteHandler3 extends Handler{
public void HandleRequest(int request) {
if (request >= 20 && request < 30){
System.out.println(this.getClass().toString() + " handled request " + request);
}else if (successor != null){
successor.HandleRequest(request);
}
}
}


public class Main {

public static void main(String[] args) {
// Configuracion del Chain of Responsibility
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);

// Generar y procesar request
int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};

for(int request : requests){
h1.HandleRequest(request);
}
}
}