Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Observer e Builder

Na aula, o padrão observer foi construído junto com o padrão builder. Isso foi pela necessidade do exercício, ou é sempre assim?

Como seria um padrão observer sem builder? Nesse caso, onde iriam a lista com todas as ações a serem feitas simultaneamente, o forEach para iterar nessa lista e a função de adicionar uma ação para a lista?

Seria possível mostrar um código exemplificando o padrão observer?

3 respostas

Fala André, tudo bem?

O pattern observer não tem obrigatoriamente de estar junto do builder pattern.

O código é um pouco extenso, vou te mandar um link que vale a pena a leitura: https://www.baeldung.com/java-observer-pattern

Não sei se entendi muito bem..

"An observable is an object which notifies observers about the changes in its state."

No código abaixo, por exemplo, um objeto que referencia a classe NotaFiscalBuilder seria o observable, e os observers seriam os objetos AcaoAposGerarNota?

public class NotaFiscalBuilder {

    private String razaoSocial;
    private String cnpj;
    private LocalDateTime dataDeEmissao;
    private double valorBruto;
    private double impostos;
    public String observacoes;
    private List<ItemDaNota> todosItens = new ArrayList<ItemDaNota>();
    private List<AcaoAposGerarNota> todasAcoes = new ArrayList();


    public NotaFiscalBuilder() {
        this.todasAcoes = new ArrayList<AcaoAposGerarNota>();
    }

    public void adicionaAcao(AcaoAposGerarNota acao) {
        this.todasAcoes.add(acao);
    }

    public NotaFiscalBuilder addEmpresa(String razaoSocial) {
        this.razaoSocial = razaoSocial;
        return this;
    }

    public NotaFiscalBuilder addCNPJ(String cnpj) {
        this.cnpj = cnpj;
        return this;
    }

    public NotaFiscalBuilder addItem(ItemDaNota item) {
        todosItens.add(item);
        valorBruto += item.getValor();
        impostos += item.getValor() * 0.05;
        return this;
    }

    public NotaFiscalBuilder addObservacoes(String observacoes) {
        this.observacoes = observacoes;
        return this;
    }

    public NotaFiscal constroi() {
        NotaFiscal nf = new NotaFiscal(razaoSocial, cnpj, dataDeEmissao, valorBruto, impostos, todosItens, observacoes);
        todasAcoes.forEach((acao) ->
        acao.executa(nf));
        return nf;
        }

}

Por fim, o texto menciona o seguinte: "In this implementation, an observable must keep a reference to the PropertyChangeSupport instance."

O que é um PropertyChangeSupport instance? No código acima, seria possível exemplificar?

solução!

Oi André, tudo bem?

Como você abriu outro tópico, acabei respondendo aqui: https://cursos.alura.com.br/forum/topico-duvida-sobre-observer-96869