Una tienda establece una filosofía de ofertas dependiendo de la época del año y de otras
cuestiones internas:
- Dependiendo del mes que se realizan las compras se le asignará un porcentaje de descuento:
- PorcentajeDescuento si ocurre en los primeros 6 meses del año.
- Una cantidad absoluta (DescuentoAbsolutoSobreUmbral) si ocurre en los últimos 6 meses del año.
- Implementa la interfaz IEstrategiaFijarPreciosVenta, y las clases descuentoAbsolutoSobreUmbral y PorcentajeDescuento.
- Completa el método realizarVenta() de la clases Ventas. Dicho método resolverá el problema con los descuentos en función del mes del año tal como se ha explicado.
Solución:
public class Principal {
public static void main(String[] args) {
Fecha f = new Fecha(20, 10, 2004);
// creamos una venta
Ventas v = new Ventas(210, f);
int valorFinal = v.realizarVenta();
System.out.println(valorFinal);
Fecha f1 = new Fecha(20, 5, 2004);
// creamos una venta
Ventas v1 = new Ventas(210, f1);
int valorFinal1 = v1.realizarVenta();
System.out.println(valorFinal1);
}
}
public class Fecha {
private int dia=0;
private int mes=0;
private int año=0;
public Fecha(int dia, int mes, int año){
if(dia < 32 && mes < 13){
this.dia = dia;
this.mes = mes;
this.año = año;
}else
System.out.println("Fecha incorrecta");
}
public int getMes(){
return this.mes;
}
public int getDia(){
return this.dia;
}
public int getAño(){
return this.año;
}
}
public class Ventas {
private Fecha fecha;
private IEstrategiaFijarPreciosVenta estrategia;
private int cantidad;
public Ventas(int cantidad, Fecha f){
this.cantidad = cantidad;
this.fecha = f;
}
public int realizarVenta(){
//TODO
int res;
if(this.fecha.getMes() < 7){
this.estrategia = new PorcentajeDescuento((float) 0.15);
res=this.estrategia.getTotalVenta(this.cantidad);
}else{
this.estrategia = new DescuentoAbsolutoSobreUmbral(3,(float)0.25);
res=this.estrategia.getTotalVenta(this.cantidad);
}
return res;
}
public int getTotalAntesDto(){
return cantidad;
}
}
public interface IEstrategiaFijarPreciosVenta {
int getTotalVenta(int in);
}
public class PorcentajeDescuento implements IEstrategiaFijarPreciosVenta{
private float p;
public PorcentajeDescuento(float p){
this.p=p;
}
public int getTotalVenta(int in) {
return (int) (in*(1-p));
}
}
public class DescuentoAbsolutoSobreUmbral implements IEstrategiaFijarPreciosVenta{
private float porcentaje;
private int umbral;
public DescuentoAbsolutoSobreUmbral(int umbral, float porcentaje){
this.umbral=umbral;
this.porcentaje=porcentaje;
}
public int getTotalVenta(int in) {
int res = (int)(in*(1-this.porcentaje));
if(res
res=this.umbral;
return res;
}
}

No hay comentarios:
Publicar un comentario