Sto affrontando un problema con il cambiamento del comportamento di una libreria (quindi non posso o non voglio cambiare i suoi interni a causa di futuri aggiornamenti, ecc.).
In questa libreria c'è una classe astratta che condivide pochi metodi con tutte le sue sottoclassi. Ora ho bisogno di cambiare alcuni metodi in questa super classe astratta senza cambiare le sottoclassi. Mi chiedevo quale schema dovrei applicare a questo senza riscrivere il tutto.
Uso PHP, quindi potrei usare un tratto per sovrascrivere questi metodi nelle mie sottoclassi secondarie che userò poi nel mio codice cliente. Ciò comporterebbe la creazione delle sottoclassi secondarie e l'aggiunta di un tratto (che è un elemento unico). Ma ho bisogno di eseguire PHP 5.3 che non supporta i tratti.
C'è un modello che risolve questo problema?
EDIT 2: il punto è che non voglio cambiare il codice della libreria, posso estendere le sottoclassi e usarle nel codice client ma non voglio cambiare il codice nella libreria stessa (così posso aggiornare la libreria facilmente).
MODIFICA: vedi il codice semplificato sotto
abstract class SuperClass {
protected function doMagic() {
... I need to change this ...
}
abstract public function execute();
}
class SubClass1 extends SuperClass {
protected public execute() {
$this->doMagic();
... some other code ...
}
}
class SubClass2 extends SuperClass {
protected public execute() {
$this->doMagic();
... some different code ...
}
}