Мое понимание шаблона декоратора состоит в том, что он предназначен для расширения возможностей объекта во время выполнения. В объяснении в Википедии они фокусируются на стеке компонентов для этой цели.
Я вообще не говорю на C #, так что это (очевидно) php-ish. Кажется, что правильная идея была бы:
class image{
function open(){ ... }
} //end of class
class decoratedImage extends image{
private goodies=array(); //the alleged 'component stack'
function addGoodie($item){
$this->goodies[]=$item;
}
function open()}{
parent::open();
foreach ($this->goodies as $componentClassName){
$component=new $componentClassName();
$component->apply($this);
}
}
} //end of class
О, опытные, объясните, пожалуйста, разрыв.