Я пытаюсь понять, правильно ли я использую шаблон Decorator, или другой шаблон лучше подходит для такой ситуации:
Без переопределения моего интерфейса я не могу украсить функциюпотому что это определение родителей мешает мне сделать это.Я не уверен, что мой вопрос ясен, так что, возможно, пример:
interface IFoo
{
public function bar();
}
class ConcreteFoo implements IFoo
{
public function bar()
{
echo "hello world!\n";
}
}
abstract class Decorator implements IFoo
{
public function __construct(IFoo $foo)
{
$this->foo = $foo;
}
public function bar()
{
$this->foo->bar();
}
}
class BeautifulDecorator extends Decorator
{
public function bar()
{
// I am unable to insert 'beautiful' between 'hello' and 'world' without redefining the bar() function again
parent::bar();
}
}
Ради простоты я по существу не могу распечатать что-то вроде «Привет, прекрасный мир», фактически не переопределяя планку.Функция для этого.
Есть ли способ сделать это с шаблоном Decorator, или есть другой шаблон, который можно использовать?