[b]Estou Com Duvida No código abaixo, onde o padrão Expert está sendo furado?
Melhore o programa, aplicando o padrão Expert
[code]public class Fita {
public enum Tipo {
normal, lancamento, infantil
};
private String título;
private Tipo códigoDePreço;
public Fita(String título, Tipo códigoDePreço) {
this.título = título;
this.códigoDePreço = códigoDePreço;
}
public String getTítulo() {
return título;
}
public Tipo getCódigoDePreço() {
return códigoDePreço;
}
public void setCódigoDePreço(Tipo códigoDePreço) {
this.códigoDePreço = códigoDePreço;
}
}
public class Aluguel {
private Fita fita;
private int diasAlugada;
public Aluguel(Fita fita, int diasAlugada) {
this.fita = fita;
this.diasAlugada = diasAlugada;
}
public Fita getFita() {
return fita;
}
public int getDiasAlugada() {
return diasAlugada;
}
}
import java.util.ArrayList;
import java.util.Collection;
public class Cliente {
private String nome;
private Collection<Aluguel> fitasAlugadas = new ArrayList<Aluguel>();
public Cliente(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public void adicionaAluguel(Aluguel aluguel) {
fitasAlugadas.add(aluguel);
}
public String extrato() {
final String fimDeLinha = System.getProperty("line.separator");
double valorTotal = 0.0;
int pontosDeAlugadorFrequente = 0;
String resultado = "Registro de Alugueis de " + getNome() + fimDeLinha;
for (Aluguel f : fitasAlugadas) {
double valorCorrente = 0.0;
Aluguel cada = f;
// determina valores para cada linha
// switch com enum
switch (cada.getFita().getCódigoDePreço()) {
case normal:
valorCorrente += 2;
if (cada.getDiasAlugada() > 2) {
valorCorrente += (cada.getDiasAlugada() - 2) * 1.5;
}
break;
case lancamento:
valorCorrente += cada.getDiasAlugada() * 3;
break;
case infantil:
valorCorrente += 1.5;
if (cada.getDiasAlugada() > 3) {
valorCorrente += (cada.getDiasAlugada() - 3) * 1.5;
}
break;
} // switch
// trata de pontos de alugador frequente
pontosDeAlugadorFrequente++;
// adiciona bonus para aluguel de um lançamento por pelo menos 2
// dias
if (cada.getFita().getCódigoDePreço() == Fita.Tipo.lancamento
&& cada.getDiasAlugada() > 1) {
pontosDeAlugadorFrequente++;
}
// mostra valores para este aluguel
resultado += "\t" + cada.getFita().getTítulo() + "\t"
+ valorCorrente + fimDeLinha;
valorTotal += valorCorrente;
} // while
// adiciona rodapé
resultado += "Valor total devido: " + valorTotal + fimDeLinha;
resultado += "Voce acumulou " + pontosDeAlugadorFrequente
+ " pontos de alugador frequente";
return resultado;
}
}
[/code]