Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO consulta patron decorator

Estas en el tema de consulta patron decorator en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola comunidad, queria preguntarles porque no me queda claro algunas cosas con respecto a este patron, bueno leyendo y releyendo entendi mas o menos como ...
  #1 (permalink)  
Antiguo 03/08/2012, 13:43
 
Fecha de Ingreso: mayo-2012
Ubicación: La Paz
Mensajes: 23
Antigüedad: 12 años, 7 meses
Puntos: 0
Pregunta consulta patron decorator

hola comunidad, queria preguntarles porque no me queda claro algunas cosas con respecto a este patron, bueno leyendo y releyendo entendi mas o menos como funciona, vi un ejemplo en wikipedia lo hize correr y funciona perfectamente el codigo en cuestion es:

Código PHP:
<?php
interface iCoffee
{
        public function 
getBaseCost();
}
 
class 
Coffee implements iCoffee
{
        protected 
$_baseCost 0;
 
        public function 
getBaseCost()
        {
                return 
$this->_baseCost;
        }
}
 
class 
BlackCoffee extends Coffee
{
        public function 
__construct()
        {
                
$this->_baseCost 5;
        }
}
 
abstract class 
CoffeeDecorator implements iCoffee
{
        protected 
$_coffee;
 
        public function 
__construct(iCoffee $Coffee)
        {
                
$this->_coffee $Coffee;
        }
}
 
class 
WithCream extends CoffeeDecorator
{
        public function 
getBaseCost()
        {
                return 
$this->_coffee->getBaseCost() + 1.5;
        }
}
 
class 
WithMilk extends CoffeeDecorator
{
        public function 
getBaseCost()
        {
                return 
$this->_coffee->getBaseCost() + 4;
        }
}
 
class 
WithChocolate extends CoffeeDecorator
{
        public function 
getBaseCost()
        {
                return 
$this->_coffee->getBaseCost() + 5;
        }
}
$coffee = new WithChocolate(new WithMilk(new WithCream(new BlackCoffee())));
echo 
'El precio del cafe es: $' $coffee->getBaseCost();
creo q la mayorria q alguna vez haya leido de este patron vio este ejemplo, lo q no entiendo son en si la parte
Código PHP:
abstract class CoffeeDecorator implements iCoffee
{
        protected 
$_coffee;
 
        public function 
__construct(iCoffee $Coffee)
        {
                
$this->_coffee $Coffee;
        }

donde a esta funcion construct se le pasa una interfaz como parametro, yo francamente no lo entiendo, y disculpen mi ignorancia, no sabia q se podia hacer algo asi, y bueno no se como buscar en la red para entender esta parte
si alguien con mas experiencia me pudiera explicar esta parte o al menos si tiene algun link de algun tema o pagina donde lo expliquen se lo agradeceria mucho
gracias y saludos
  #2 (permalink)  
Antiguo 03/08/2012, 14:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: consulta patron decorator

No es que le pases una interfaz, simplemente que tu método acepta un objeto que implemente una interfaz.

Recuerda que las interfaces son "contratos de diseño", o sea que si tu implementas X interfaz, estas obligado a implementar los métodos de esa interfaz.

Cuando tu usas type-hint para poner una interfaz, le dices al compilador: "mi clase acepta cualquier objeto que implemente la interfaz".

Esto es algo genérico de POO, no es exclusivo del patrón decorator, es simplemente para garantizar funcionalidad.

Saludos.
  #3 (permalink)  
Antiguo 03/08/2012, 14:56
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 15 años
Puntos: 65
Respuesta: consulta patron decorator

http://php.net/manual/es/language.oop5.typehinting.php

fijate que todas las clases que extienden a CoffeeDecorator son también del tipo iCoffee porque CoffeeDecorator implementa la interfaz iCoffee
  #4 (permalink)  
Antiguo 03/08/2012, 15:18
 
Fecha de Ingreso: mayo-2012
Ubicación: La Paz
Mensajes: 23
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: consulta patron decorator

ah muchas gracias por aclarar las dudas a los dos , la verdad q eso de type-hint no lo tengo muy claro pero investigare por ahi, y si tengo alguna otra duda espero me puedan ayudar luego
saludos GatorV y Dany_s
gracias por su tiempo
  #5 (permalink)  
Antiguo 03/08/2012, 15:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: consulta patron decorator

Lo del type-hint simplemente es decir que tipo de objeto aceptan tus métodos, funciona solo con clases o arrays:
Código PHP:
Ver original
  1. public function algo(array $algo); // solo acepta un array
  2. public function algo2(Foco $foco); // solo acepta objetos o interfaces del tipo Foco
  3.  
  4. function foo(array $bar); // también funciona para funciones sencillas

Saludos.
  #6 (permalink)  
Antiguo 03/08/2012, 15:36
 
Fecha de Ingreso: mayo-2012
Ubicación: La Paz
Mensajes: 23
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: consulta patron decorator

Muchas gracias, ahora lo veo todo mas claro

Etiquetas: decorador, decorator, diseño, patrones, pattern, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:42.