1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Builder X Factory

Estou estudando seguindo a apostila da Caelum a implementação de um Contrutor de Candlestick , que são gráficos e ou XMLs que representam uma ou mais negociações da bolsa de valores contendo uma classe que representa cada negocio. criei construtores usando o padrão Factory method mas por ficar com dificuldade para controlar o momento que instancia variáveis com valores nulos ou inválidos utilizei também o padrão builder, ai surgiu a minha dúvida,

se os valores do candle são obrigatórios a implementação fica com cara do padrão factory mas como impedir que instancie valores inválidos sem o builder?

public final class Negocio {
    private final double preco;
    private final int quantidade;
    private final Calendar data;
    public Negocio(double preco, int quantidade, Calendar data) {
        this.preco = preco;
        this.quantidade = quantidade;
        this.data = data;
    }
    public double getPreco() {
        return preco;
    }
    public int getQuantidade() {
        return quantidade;
    }
    public Calendar getData() {
        return data;
    }
    public double getVolume(){
        return preco * quantidade;
    }


}

E uma classe que representa o candlestick que são os valores do dia

public final class Candlestick {
    private final double abertura;
    private final double fechamento;
    private final double minimo;
    private final double maximo;
    private final double volume;
    private final Calendar data;

    public Candlestick(double abertura, double fechamento, double minimo,
            double maximo, double volume, Calendar data) {
        this.abertura = abertura;
        this.fechamento = fechamento;
        this.minimo = minimo;
        this.maximo = maximo;
        this.volume = volume;
        this.data = data;
    }

    public String toString() {
        SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");


        return "Abertura " + this.abertura + ", Fechamento " + this.fechamento
                + ", Minima " + this.minimo + ", Maxima " + this.maximo
                + ",volume " + this.volume + " Data " + sd.format(data.getTime());
    }

    public double getAbertura() {
        return abertura;
    }

    public double getFechamento() {
        return fechamento;
    }

    public double getMinimo() {
        return minimo;
    }

    public double getMaximo() {
        return maximo;
    }

    public double getVolume() {
        return volume;
    }

    public Calendar getData() {
        return data;
    }

    public boolean isAlta() {
        return this.abertura < this.fechamento;
    }

    public boolean isBaixa() {
        return this.abertura > this.fechamento;
    }

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java design-patterns ou faça a sua própria pergunta.