SlideShare una empresa de Scribd logo
1 de 11
Patrón Chain of Responsibility 1. Nombre: Chain of Responsibility 2. Clasificación:  De Comportamiento 3. Intención:  Permite establecer una cadena de objetos receptores a través de los cuales se pasa una petición formulada por un objeto emisor. Cualquiera de los objetos receptores puede responder a la petición en función de un criterio establecido  4. También conocido como:  Cadena de responsabilidad 5. Motivación : Se utiliza, por ejemplo, cuando en función del estado del sistema las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores.
[object Object],[object Object],[object Object],[object Object],[object Object]
7. Estructura : sucesor Manejador1 + peticion() (A)Manejador + peticion() Client +operacion() Manejador1 + peticion()
[object Object],[object Object],[object Object],[object Object],9. Colaboraciones : El cliente hace las peticiones a través de  operacion . Los objetos pasan el mensaje a través del método  peticion  hasta que la solicitud sea atendida por un manejador concreto.
11. implementación : Todos los objetos receptores implementarán la misma interfaz o extenderán la misma clase abstracta. En ambos casos se proveerá de un método que permita obtener el sucesor y así el paso de la petición por la cadena será lo más flexible y transparente posible
12. Código de ejemplo :  Manager-->Director-->Vice President-->President  abstract class PurchasePower { protected final double base = 500; protected PurchasePower successor; public void setSuccessor(PurchasePower successor){ this.successor = successor; } abstract public void processRequest(PurchaseRequest request); } class ManagerPPower extends PurchasePower { private final double ALLOWABLE = 10 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Manager will approve $&quot;+ request.getAmount()); else if( successor != null) successor.processRequest(request); } }
class DirectorPPower extends PurchasePower { private final double ALLOWABLE = 20 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Director will approve $&quot;+ request.getAmount()); else if( successor != null) successor.processRequest(request); } } class VicePresidentPPower extends PurchasePower { private final double ALLOWABLE = 40 * base; public void processRequest(PurchaseRequest request) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Vice President will approve $&quot; + request.getAmount()); else if( successor != null ) successor.processRequest(request); } }
class PresidentPPower extends PurchasePower { private final double ALLOWABLE = 60 * base; public void processRequest(PurchaseRequest request){ if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;President will approve $&quot; + request.getAmount()); else System.out.println( &quot;Your request for $&quot; + request.getAmount() + &quot; needs a board meeting!&quot;); } }
class PurchaseRequest { private int number; private double amount; private String purpose; public PurchaseRequest(int number, double amount, String purpose){ this.number = number; this.amount = amount; this.purpose = purpose; } public double getAmount() { return amount; } public void setAmount(double amt){ amount = amt; } public String getPurpose() { return purpose; } public void setPurpose(String reason) { purpose = reason; } public int getNumber(){ return number; } public void setNumber(int num) { number = num; }  }
import java.io.*; public class CheckAuthority { public static void main(String[] args){ ManagerPPower manager = new ManagerPPower(); DirectorPPower director = new DirectorPPower(); VicePresidentPPower vp = new VicePresidentPPower(); PresidentPPower president = new PresidentPPower(); manager.setSuccessor(director); director.setSuccessor(vp); vp.setSuccessor(president); //enter ctrl+c to kill. try{ while (true) { System.out.println(&quot;Enter the amount to check who should approve your expenditure.&quot;); System.out.print(&quot;>&quot;); double d = Double.parseDouble(new BufferedReader(new InputStreamReader(System.in)).readLine()); manager.processRequest(new PurchaseRequest(0, d, &quot;General&quot;)); } }catch(Exception e){ System.exit(1); }  } }
[object Object],[object Object],13. Usos conocidos : La mayoría de las librería de java usan este patrón.

Más contenido relacionado

La actualidad más candente (15)

Manual de Encriptacion con TLS
Manual de Encriptacion con TLSManual de Encriptacion con TLS
Manual de Encriptacion con TLS
 
ESPACIO DE NOMBRES SYSTEM.DATA.SQLCLIENT
ESPACIO DE NOMBRES SYSTEM.DATA.SQLCLIENTESPACIO DE NOMBRES SYSTEM.DATA.SQLCLIENT
ESPACIO DE NOMBRES SYSTEM.DATA.SQLCLIENT
 
System.data.oledb
System.data.oledbSystem.data.oledb
System.data.oledb
 
Espacio de Nombres System.Data.SqlClient
Espacio de Nombres System.Data.SqlClientEspacio de Nombres System.Data.SqlClient
Espacio de Nombres System.Data.SqlClient
 
Sql connection
Sql connectionSql connection
Sql connection
 
Java con Base de Datos
Java con Base de Datos Java con Base de Datos
Java con Base de Datos
 
Objeto Sql Command
Objeto Sql CommandObjeto Sql Command
Objeto Sql Command
 
Sqlcommand
SqlcommandSqlcommand
Sqlcommand
 
Objeto sqlcomand
Objeto sqlcomandObjeto sqlcomand
Objeto sqlcomand
 
Espacio de nombres system.Data.Oledb
Espacio de nombres system.Data.OledbEspacio de nombres system.Data.Oledb
Espacio de nombres system.Data.Oledb
 
Funciones basicas y ejemplos
Funciones basicas y ejemplosFunciones basicas y ejemplos
Funciones basicas y ejemplos
 
Statement
StatementStatement
Statement
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
 
Statement
StatementStatement
Statement
 
ESPACIO DE NOMBRES SYSTEM.DATA.OLEDB
 ESPACIO DE NOMBRES SYSTEM.DATA.OLEDB ESPACIO DE NOMBRES SYSTEM.DATA.OLEDB
ESPACIO DE NOMBRES SYSTEM.DATA.OLEDB
 

Destacado (9)

apure
apureapure
apure
 
Typography
TypographyTypography
Typography
 
Magazine Covers Analysis
Magazine Covers AnalysisMagazine Covers Analysis
Magazine Covers Analysis
 
Typography
TypographyTypography
Typography
 
Traffic flow model with the use of KMC
Traffic flow model with the use of KMCTraffic flow model with the use of KMC
Traffic flow model with the use of KMC
 
The History of Music Magazines
The History of Music MagazinesThe History of Music Magazines
The History of Music Magazines
 
Shristinagar The New Asansol Marketed by Big Bulls Realty
Shristinagar  The New Asansol Marketed by Big Bulls RealtyShristinagar  The New Asansol Marketed by Big Bulls Realty
Shristinagar The New Asansol Marketed by Big Bulls Realty
 
Oxy Homez Super Realtech @ 9910006674
Oxy Homez Super Realtech @ 9910006674Oxy Homez Super Realtech @ 9910006674
Oxy Homez Super Realtech @ 9910006674
 
Team Taurus The County, Disney Themed Project in Kolkata - BIG BULLS REALTY
Team Taurus The County, Disney Themed Project in Kolkata - BIG BULLS REALTYTeam Taurus The County, Disney Themed Project in Kolkata - BIG BULLS REALTY
Team Taurus The County, Disney Themed Project in Kolkata - BIG BULLS REALTY
 

Similar a Cadenarespon

Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletjubacalo
 
Peticiones y respuestas
Peticiones y respuestasPeticiones y respuestas
Peticiones y respuestasEdwin Enriquez
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacionJechu2013
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundojubacalo
 
Clase 5 AJAX - Desarrollo de aplicaciones móviles
Clase 5  AJAX - Desarrollo de aplicaciones móvilesClase 5  AJAX - Desarrollo de aplicaciones móviles
Clase 5 AJAX - Desarrollo de aplicaciones móvilesChristian Cabrera
 
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.Anyeni Garay
 
Presentación1
Presentación1Presentación1
Presentación1fabymon
 
SALUDOS EN INGLES
SALUDOS EN INGLESSALUDOS EN INGLES
SALUDOS EN INGLESludiviarosa
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSPousli07
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jqueryiva29234
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web javaCésar Ocampo
 
Construccion a través de compontes
Construccion a través de compontesConstruccion a través de compontes
Construccion a través de compontesjalzate
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLjubacalo
 

Similar a Cadenarespon (20)

Acceso a BBDD mediante un servlet
Acceso a BBDD mediante un servletAcceso a BBDD mediante un servlet
Acceso a BBDD mediante un servlet
 
Curso Java Avanzado 2 Servlets
Curso Java Avanzado   2 ServletsCurso Java Avanzado   2 Servlets
Curso Java Avanzado 2 Servlets
 
Peticiones y respuestas
Peticiones y respuestasPeticiones y respuestas
Peticiones y respuestas
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacion
 
Explicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundoExplicación del código del Servlet HolaMundo
Explicación del código del Servlet HolaMundo
 
Clase 5 AJAX - Desarrollo de aplicaciones móviles
Clase 5  AJAX - Desarrollo de aplicaciones móvilesClase 5  AJAX - Desarrollo de aplicaciones móviles
Clase 5 AJAX - Desarrollo de aplicaciones móviles
 
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.
TEMA Nº 5: OBJETOS RELACIONADOS CON LA SALIDA O LA ENTRADA DE LA PÁGINA.
 
Presentacion ajax
Presentacion   ajaxPresentacion   ajax
Presentacion ajax
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Objetos implícitos en jsp
Objetos implícitos en jspObjetos implícitos en jsp
Objetos implícitos en jsp
 
Presentación1
Presentación1Presentación1
Presentación1
 
Clase servlet - Análisis de Sistemas
Clase servlet - Análisis de SistemasClase servlet - Análisis de Sistemas
Clase servlet - Análisis de Sistemas
 
SALUDOS EN INGLES
SALUDOS EN INGLESSALUDOS EN INGLES
SALUDOS EN INGLES
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
10. consumiendo datos
10. consumiendo datos10. consumiendo datos
10. consumiendo datos
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jquery
 
introduccion a Ajax
introduccion a Ajaxintroduccion a Ajax
introduccion a Ajax
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Construccion a través de compontes
Construccion a través de compontesConstruccion a través de compontes
Construccion a través de compontes
 
Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTML
 

Cadenarespon

  • 1. Patrón Chain of Responsibility 1. Nombre: Chain of Responsibility 2. Clasificación: De Comportamiento 3. Intención: Permite establecer una cadena de objetos receptores a través de los cuales se pasa una petición formulada por un objeto emisor. Cualquiera de los objetos receptores puede responder a la petición en función de un criterio establecido 4. También conocido como: Cadena de responsabilidad 5. Motivación : Se utiliza, por ejemplo, cuando en función del estado del sistema las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores.
  • 2.
  • 3. 7. Estructura : sucesor Manejador1 + peticion() (A)Manejador + peticion() Client +operacion() Manejador1 + peticion()
  • 4.
  • 5. 11. implementación : Todos los objetos receptores implementarán la misma interfaz o extenderán la misma clase abstracta. En ambos casos se proveerá de un método que permita obtener el sucesor y así el paso de la petición por la cadena será lo más flexible y transparente posible
  • 6. 12. Código de ejemplo : Manager-->Director-->Vice President-->President abstract class PurchasePower { protected final double base = 500; protected PurchasePower successor; public void setSuccessor(PurchasePower successor){ this.successor = successor; } abstract public void processRequest(PurchaseRequest request); } class ManagerPPower extends PurchasePower { private final double ALLOWABLE = 10 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Manager will approve $&quot;+ request.getAmount()); else if( successor != null) successor.processRequest(request); } }
  • 7. class DirectorPPower extends PurchasePower { private final double ALLOWABLE = 20 * base; public void processRequest(PurchaseRequest request ) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Director will approve $&quot;+ request.getAmount()); else if( successor != null) successor.processRequest(request); } } class VicePresidentPPower extends PurchasePower { private final double ALLOWABLE = 40 * base; public void processRequest(PurchaseRequest request) { if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;Vice President will approve $&quot; + request.getAmount()); else if( successor != null ) successor.processRequest(request); } }
  • 8. class PresidentPPower extends PurchasePower { private final double ALLOWABLE = 60 * base; public void processRequest(PurchaseRequest request){ if( request.getAmount() < ALLOWABLE ) System.out.println(&quot;President will approve $&quot; + request.getAmount()); else System.out.println( &quot;Your request for $&quot; + request.getAmount() + &quot; needs a board meeting!&quot;); } }
  • 9. class PurchaseRequest { private int number; private double amount; private String purpose; public PurchaseRequest(int number, double amount, String purpose){ this.number = number; this.amount = amount; this.purpose = purpose; } public double getAmount() { return amount; } public void setAmount(double amt){ amount = amt; } public String getPurpose() { return purpose; } public void setPurpose(String reason) { purpose = reason; } public int getNumber(){ return number; } public void setNumber(int num) { number = num; } }
  • 10. import java.io.*; public class CheckAuthority { public static void main(String[] args){ ManagerPPower manager = new ManagerPPower(); DirectorPPower director = new DirectorPPower(); VicePresidentPPower vp = new VicePresidentPPower(); PresidentPPower president = new PresidentPPower(); manager.setSuccessor(director); director.setSuccessor(vp); vp.setSuccessor(president); //enter ctrl+c to kill. try{ while (true) { System.out.println(&quot;Enter the amount to check who should approve your expenditure.&quot;); System.out.print(&quot;>&quot;); double d = Double.parseDouble(new BufferedReader(new InputStreamReader(System.in)).readLine()); manager.processRequest(new PurchaseRequest(0, d, &quot;General&quot;)); } }catch(Exception e){ System.exit(1); } } }
  • 11.