Articulo de referencia

Patrón de resistencia

El patrón balking es un patrón de diseño de software que solo ejecuta una acción en un objeto cuando este se encuentra en un estado particular . Por ejemplo, si un objeto lee ar...

El patrón balking es un patrón de diseño de software que solo ejecuta una acción en un objeto cuando este se encuentra en un estado particular . Por ejemplo, si un objeto lee archivos ZIP y un método que realiza una llamada invoca un método get en el objeto cuando el archivo ZIP no está abierto, el objeto "balk" en la solicitud. En el lenguaje de programación Java , por ejemplo, se IllegalStateExceptionpodría lanzar una excepción en estas circunstancias. En C# sería InvalidOperationException.

Algunos especialistas en este campo consideran que la resistencia a la llamada es más un antipatrón que un patrón de diseño. Si un objeto no puede admitir su API , debería limitarla para que la llamada problemática no esté disponible o para que pueda realizarse sin limitaciones. Debería:

  • Ser creado en un "estado cuerdo";
  • no se hará disponible hasta que esté en un estado mental adecuado;
  • conviértete en una fachada y responde con un objeto que se encuentra en un estado cuerdo.

Uso

Los objetos que utilizan este patrón generalmente se encuentran en un estado propenso a fallar temporalmente, pero por un tiempo indeterminado. Si se requiere que los objetos permanezcan en un estado propenso a fallar durante un período de tiempo conocido y finito, entonces podría ser preferible el patrón de suspensión protegida .

Implementación

A continuación se muestra un ejemplo general y sencillo de implementación del patrón balking. [ 1 ] Como se muestra en la definición anterior, observe cómo se utiliza la línea "synchronized". Si hay varias llamadas al método job, solo una continuará mientras que las demás no devolverán nada. Otro aspecto a tener en cuenta es el jobCompleted()método. La razón por la que está sincronizado es que la única forma de garantizar que otro hilo vea un cambio en un campo es sincronizar todo el acceso al mismo. De hecho, dado que es una variable booleana, podría dejarse sin sincronizar explícitamente, solo declarada como volatile, para garantizar que el otro hilo no lea un valor en caché obsoleto.

clase pública Ejemplo { booleano privado trabajoEnProgreso = falso ;public void job () { synchronized ( this ) { if ( jobInProgress ) { return ; } jobInProgress = true ; } // El código para ejecutar el trabajo va aquí // ... jobCompleted (); }void jobCompleted () { synchronized ( this ) { jobInProgress = false ; } } }

Véase también

Referencias

  1. Grand, Mark (2002). Patrones en Java, Volumen 1: Un catálogo de patrones de diseño reutilizables ilustrados con UML, Segunda edición . Indianápolis, Indiana: John Wiley & Sons.

Obtenido de " https://en.wikipedia.org/w/index.php?title=Balking_pattern&oldid=1360662003 "