Vertical y horizontal: dos enfoques para el Patrón Decorador

Descripción general

Es bueno comenzar con el enfoque "vertical" y migrar al enfoque "horizontal" cuando el número de decoradores comienza a crecer.

[TOC] Tabla de Contenidos

Un Decorator es una de las mejores maneras de agregar características a un objeto sin cambiar su interfaz. Yo uso el patrón "composite"muy a menudo y siempre me pregunto cómo diseñar la lista de características configurable. No estoy seguro de tener la respuesta correcta, pero veamos un ejemplo.

Digamos que tengo una lista de los números:

interface Numbers {
  Iterable<Integer> iterate();
}

Ahora quiero crear una lista que sólo tendrá números impares, sin repetir, positivos, y ordenados. El primer enfoque es vertical:

Numbers numbers = new Sorted(
  new Unique(
    new Odds(
      new Positive(
        new ArrayNumbers(
          new Integer[] {
            -1, 78, 4, -34, 98, 4,
          }
        )
      )
    )
  )
);

El segundo enfoque es horizontal:

Numbers numbers = new Modified(
  new ArrayNumbers(
    new Integer[] {
      -1, 78, 4, -34, 98, 4,
    }
  ),
  new Diff[] {
    new Positive(),
    new Odds(),
    new Unique(),
    new Sorted(),
  }
);

¿Ves la diferencia? El primer enfoque decora ArrayNumbers "verticalmente", añadiendo funcionalidad a través de los decoradores componibles Positive, Odds, Unique, and Sorted.

El segundo enfoque presenta la nueva interfaz Diff (diferencias), que implementa la funcionalidad básica de los números iteración a través de instancias de Positive, Odds, Unique, and Sorted.

interface Diff {
  Iterable<Integer> apply(Iterable<Integer> origin);
}

Para el usuario de numbers (números), ambos enfoques son los mismos. La diferencia está sólo en el diseño. ¿Cuál es mejor? y ¿Cuándo? Parece que la decoración vertical es más fácil de implementar y es más adecuada para objetos más pequeños que exponen sólo unos pocos métodos.

En cuanto a mi experiencia, siempre tiendo a comenzar con la decoración vertical, ya que es más fácil de implementar pero finalmente migrar a una horizontal cuando el número de decoradores comienza a crecer.


↑↑↑

Bibliografía

by Yegor Bugayenko Oct 15, 15 · Java Zone


↑↑↑

A.2.Enlaces

[Para saber mas]
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización
[HTML5 Desarrollado usando CSS3]