![]() |
Decorator Pattern in PHP5 Hola, De ocioso he estado analizando un par de patrones de diseño y me he topado con un problema en un ejemplo del Decorator Pattern. El problema es que no funciona como debería, en las subclasses de la clase decorator "String_Formatter" solo ejecuta con exito la 1º, osea String_Formatter_Uppercase, en las restantes hijas el metodo getString del padre obtiene un nulo. La salida en el metodo output debiese ser "PATTERNS FOR PHP" Aqui dejo el ejemplo haber si alguien más experimentado que yo me ayuda a encontrar la correcta solución. La fuente del ejemplo lo he sacado de patternsforphp.com. Código PHP: |
Re: Decorator Pattern in PHP5 [Solucionado] Solucionado!!! Si no me equivoco y haber si alguien me lo confirma, hay que remplazar lo siguiente: Código PHP: Código PHP: |
Re: Decorator Pattern in PHP5 Hola zsamer: Me intereso tu ejemplo, y tienes razon en la corrección que hiciste, debia pasarse el objeto '$stringFormatter' a los formatters. Si me permites una observación o una variante a este ejemplo, podría ser: - Hacer que la clase 'String_Formatter' extienda de la clase 'String_Writer'. - Definir la clase 'String_Formatter' como abstracta, definiendo el método 'format' como método abstracto. - Hacer que las clases formatters, extiendan solamente de 'String_Formatter', implementando el método 'format' a su modo. Te muestro un ejemplo de lo que digo solamente para la clase 'String_Formatter_Uppercase': Código: abstract class String_Formatter extends String_Writer{Ademas, en la pagina index.php (así le llame a la pagina de prueba) evitamos hacer demasiadas instanciaciones (tal vez innecesarias, al menos yo la veo mas limpia). Esto lo hice al ver que en el ejemplo original, define una estructura no aprovechada, al recibir como parámetro un objeto de tipo 'String_Formatter' y al mismo tiempo hereda de él (eso me confundio un poco al principio). Si hay alguna observación, estoy abierto a críticas o sugerencias. Un saludo, un gusto tratar este tema. :arriba: |
Re: Decorator Pattern in PHP5 Me parece que la idea del Decorate Patterns es evitar la herarquia de la clase base, osea de String_Writer, ya que unos de los principios fundamentales de este patron es no tocar nada absolutamente nada de la clase base y entregar todo el poder a la clase Decorator. |
Re: Decorator Pattern in PHP5 Ups ! :neurotico, pasé por alto la independencia entre el Decorador y el Decorado, tienes razón. Tal vez lo apropiado sea que las clases formatters, reciban como parámetro el objeto String_Writer, entonces la clase String_Formatter quedaría así: Código: abstract class String_Formatter{Código: class String_Formatter_Uppercase extends String_Formatter {Código: $string = 'php rof snrettap'; |
| La zona horaria es GMT -6. Ahora son las 02:47. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.