Tenes que solucionar lo de preguntar el tipo.
Código PHP:
Ver originalfunction __construct ($obj=null){
if (!($obj instanceof tag)){
$obj = (string) $obj;
}
}
$this->obj = $obj;
}
con eso estás desaprovechando el polimorfismo y la herencia (o interfaces si era el caso), todos tus ojetos que pueden ser decorados y los que decoran son del mismo tipo, por lo tanto van a responder a las mismas operaciones
y el constructor está aceptando objetos de cualquier tipo
Fijate en la Clase Html del ejemplo de gator_v, el método addTag(Tag $tag) acepta objetos de tipo Tag, depende de Tag y no importa si le pasas un Link, Bold, o Img porque ellos son de tipo Tag