Analysis Pattern: Conta (Account)

O que é

Detalhes de funcionamento

Quando deve ser usado

Código exemplo

class Conta {
...
private Collection lancamentos = new HashSet();
private Moeda moeda;
void addLancamento(Money valor, Calendar date) {
assert(moeda.equals(valor.Moeda()));
lancamentos.add(new Lancamento(valor, data));
}
Money saldo(FaixaData periodo) {
Money resultado = new Money(0, moeda);
Iterator it = lancamentos.iterator();
while (it.hasNext()) {
Lancamento umLancamento = (Lancamento) it.next();
if (periodo.includes(umLancamento.data()))
resultado = resultado.add(umLancamento.valor());
}
return resultado;
}
Money saldo(Calendar data) {
return saldo(FaixaData.ate(data));
}
Money saldo() {
return saldo(hoje());
}
Money depositos(FaixaData periodo) {
Money resultado = new Money(0, moeda);
Iterator it = lancamentos.iterator();
while (it.hasNext()) {
Lancamento umLancamento = (Lancamento) it.next();
if (periodo.includes(umLancamento.data())
&& umLancamento.valor().isPositivo())
resultado = resultado.add(umLancamento.valor());
}
return resultado;
}
Money saques(FaixaData periodo) {
Money resultado = new Money(0, moeda);
Iterator it = lancamentos.iterator();
while (it.hasNext()) {
Lancamento umLancamento = (Lancamento) it.next();
if (periodo.includes(umLancamento.data())
&& umLancamento.valor().isNegativo())
resultado = resultado.add(umLancamento.valor());
}
return resultado;
}
}

Hierarquia de contas

programa