Fiz a seguinte implementação, não sei se está correta, gostaria da opinião de vocês. Segue o trecho que interessa na dúvida, em relação à passar o próximo formato no construtor da classe:
interface Resposta {
public function responde(Requisicao $req, Conta $conta);
public function __construct(Resposta $proximo = null);
}
class retornoInvalido implements Resposta {
private $proximaResposta;
public function __construct(Resposta $proximo=null) {
$this->proximaResposta = $proximo;
}
public function responde(Requisicao $req, Conta $conta) {
return "Formato inválido";
}
}
//trecho da montagem da corrente:
$formatoInvalido = new retornoInvalido();
$formatoPorcentagem = new retornoPorcentagem( $formatoInvalido );
$formatoCSV = new retornoCSV( $formatoPorcentagem );
$formatoXML = new retornoXML( $formatoCSV );
return $formatoXML->responde($req, $conta);
Não sei se é correto fazer isso, mas na interface eu já defini que deve ser passado um objeto do tipo resposta ou se nada for passado ele usa null. Com isso, todos que forem implementar a classe resposta deverão criar este método construtor padronizado.
Posso colocar um construtor na interface? A maneira como pensei está correta?