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

Dúvida sobre Interpreter

Faz sentido a classe número ser uma expressão. Conceitualmente um número é uma expressão no contexto da matemática?

Fiz uma outra implementação um pouco diferente na parte dos construtores da classe Soma e Subtração.

package br.com.schimidtsolutions.estudo.interpreter;

public class Programa {

    public static void main(final String[] args) {
        Expressao numero1 = new Numero(10);
        Expressao numero2 = new Numero(30);
        Expressao numero3 = new Numero(50);

        int resultadoSubtracao = new Subtracao(numero2, numero1).avaliar();
        int resultadoSoma = new Soma(new Numero(resultadoSubtracao), numero3).avaliar();

        System.out.println(resultadoSoma);
    }
}

package br.com.schimidtsolutions.estudo.interpreter;

public class Numero implements Expressao {
    private final int numero;

    public Numero(final int numero) {
        this.numero = numero;
    }

    @Override
    public int avaliar() {
        return numero;
    }

    @Override
    public String toString() {
        return String.format("Numero [%,d]", numero);
    }
}

package br.com.schimidtsolutions.estudo.interpreter;

public class Soma implements Expressao {
    private final int numeroEsquerda;
    private final int numeroDireita;

    public Soma(final Expressao expressaoAEsquerda, final Expressao expressaoADireita) {
        numeroEsquerda = expressaoAEsquerda.avaliar();
        numeroDireita = expressaoADireita.avaliar();
    }

    @Override
    public int avaliar() {
        return numeroEsquerda + numeroDireita;
    }
}

package br.com.schimidtsolutions.estudo.interpreter;

public class Subtracao implements Expressao {
    private final int numeroEsquerda;
    private final int numeroDireita;

    public Subtracao(final Expressao expressaoAEsquerda, final Expressao expressaoADireita) {
        numeroEsquerda = expressaoAEsquerda.avaliar();
        numeroDireita = expressaoADireita.avaliar();
    }

    @Override
    public int avaliar() {
        return numeroEsquerda - numeroDireita;
    }
}
package br.com.schimidtsolutions.estudo.interpreter;

public interface Expressao {

    public int avaliar();
}
1 resposta
solução!

Oi Felipe, em relação a sua implementação, acho que não tem problema. O único ponto que vc, eventualmente pode perder, eh que vc ta avaliando a expressão sem ninguém ter chamado ainda o avalia da sua soma ou subtração. Para essas contas leves, não tem problema, se fosse realmente um calculadora com expressões mais demoradas, podia ter alguma perda.