Utilizando el ejemplo del decorador de café que se muestra en Wikipedia (http://en.wikipedia.org/wiki/Decorator_pattern) cómo alguien puede tener métodos que solo los decoradores tienen, por ejemplo, el decorador de leche podría tener un método llamado "fatContent". ¿Es esto posible con este tipo de patrón de diseño? Si no, ¿qué tipo de patrón podría usar para lograr esto?Decorador Patrón con métodos específicos de decorador en Java
Respuesta
El patrón de decorador por definición no permite agregar métodos distintos a los definidos en la interfaz. En realidad, siempre puede agregar métodos a cualquier clase, pero una vez que estos métodos no están definidos en la interfaz de implementación, el cliente no puede llamarlos utilizando esta interfaz.
La solución simple a su problema es definir varias interfaces, p. Café y leche. Luego puede definir la clase Capuchino
que implementa ambas interfaces y probablemente contenga 2 instancias: SimpleCofee
y FoamedMilk
. Pero esta solución se ve más como una combinación de Decorador y Fachada.
Los decoradores pueden tener cualquier cantidad de métodos específicos. Puede introducir una interfaz específica de decorador que los decoradores implementan además de implementar la interfaz decorada.
Sin embargo, alguien tiene que saber que existen métodos, por lo tanto el decorador tiene que llamar al método internamente, la persona que llama debe saber que usa un decorador en lugar del objeto decorado (puede probar usando instanceof
) o usar reflejo para verifica esos métodos.
Usted podía, pero que había necesidad de conocer el tipo con el fin de realmente llamada al método (suponiendo que no hay reflexión, etc.) si no coincide con el tipo que está pasando alrededor.
Tipos determinan lo que se conoce en tiempo de compilación: si CoffeeDecorater
no incluye una firma fatContent
, nada de recibir un CoffeeDecoractor
sabe que existe el método.
Podría crear una interfaz adicional, pero necesitaría saber que existía para poder verificarla (instanceof
) o interrogar a la clase para buscar una firma específica (reflejo).
Java sabe que existe un método en tiempo de compilación o lo busca en tiempo de ejecución.
- 1. Patrón decorador en C++
- 2. Decorador Pregunta patrón C#/java
- 3. APP y el patrón decorador
- 4. Implementación del patrón de decorador
- 5. el decorador del patrón y Métodos de extensión en C#
- 6. patrón de puente en comparación con el patrón de decorador
- 7. decorador en Java
- 8. Cuándo utilizar el patrón decorador?
- 9. Patrón de decorador en Objective-C
- 10. Implementando el patrón de decorador en Python
- 11. Cómo manejar 'este' referencia en decorador patrón
- 12. StructureMap y el patrón de decorador
- 13. El patrón de decorador y @Inject
- 14. ¿Cuándo necesitamos un patrón de decorador?
- 15. aplicar el patrón decorador a las formas
- 16. ¿Por qué necesitamos el decorador en el patrón de diseño del decorador?
- 17. extrañeza con un decorador
- 18. inyección de dependencias Ninject con el patrón decorador
- 19. Decorar un decorador
- 20. Usando el mismo decorador (con argumentos) con funciones y métodos
- 21. decorador de pitón con javascript
- 22. Escribir un decorador de clase que se aplica un decorador a todos los métodos
- 23. decorador de patrones de diseño
- 24. pitón @abstractmethod decorador
- 25. decorador en Python currying
- 26. Patrón de diseño de decorador, error de función
- 27. ¿Qué convención de nomenclatura usas para el Patrón Decorador?
- 28. clases de decorador en Python
- 29. Métodos de autoregistro de clase utilizando el decorador
- 30. Muy simple Uso del patrón de decorador para generar números
No conocía ese patrón de diseño. Honestamente, no me gusta. –
@MartijnCourteaux El ejemplo del café de la wikipedia se extrajo del libro [Your Brain On Design Patterns] (http://headfirstlabs.com/books/hfdp/). Pero contiene solo una pequeña parte sin más explicaciones. Recomiendo esta conferencia para una visión completa del patrón. – Beccari
@MartijnCourteaux Decorator ?! Es uno de los patrones más * útiles *, IMO. –