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