Pero no solventa en nada el problema de @negro1985, ya que como bien comentaron todos en el tema, solamente tiene que separar esa funcionalidad en otra clase e instanciarla dentro de su clase para utilizarla, no hay necesidad de usar el patrón decorator, ni nada, es simplemente instanciar la clase dentro y utilizarla.
Tu solución que expones no usa tampoco el patrón decorator, ya que si bien lees, la idea del patrón decorator es que el objeto decorado funcione con o sin el decorador, un ejemplo claro:
Código PHP:
Ver original<?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();
Tu ejemplo no tiene nada de eso, por eso mi referencia a que leyeras y estudiaras realmente para que sirve cada patrón y cual es el problema en específico que requiere
.
Saludos.