Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

PHP - Design Pattern I: Fim da corrente no Chain of Responsibility

Opinião do Instrutor no exercicio é que podemos fazer com que o próximo ítem da corrente seja opcional (ou seja, o atributo outraResposta fica com null caso não haja um próximo ítem). E, no momento de invocar o próximo, você deve verificar se esse atributo é nulo ou não.

Contudo no exemplo que ele dá, o proximo item é obrigatório quando você está instanciando um objeto:

class RespostaEmPorcento implements Resposta {
    private $outraReposta;

    function __construct(Resposta $outraResposta) {
        $this->outraResposta = $outraResposta;
    }

    public function RespostaEmPorcento() {
        $this->outraResposta = null; // nao recebi a proxima!
    }

     public function responde(Requisicao $req, Conta $conta) {
        if($req->getFormato() == Formato::PORCENTO) {
            echo $conta->getTitular() . '%' . $conta->getSaldo();
        } else if(!is_null($outraResposta)){
            $outraResposta->responde($req, $conta);
        } else {
            // não existe próxima na corrente, e ninguém atendeu a requisição!
            // poderíamos não ter feito nada aqui, caso não fosse necessário!
            throw new Exception("Formato de resposta não encontrado");
        }
    }
}

Notem que no construtor é esperado um objeto do tipo Resposta. Neste caso não seria interessante criar uma nova classe apenas para tratar este erro?

class RespostaNaoEncontrada implements Resposta {

  public function __construct(){}

  public function responde(Requisicao $req, Conta $conta)
  {
      throw new Exception("Formato de resposta inexistente");
  }
}
1 resposta
solução!

Criei o mesmo tópico na categoria correta.