import java.util.Vector;
import java.util.Iterator;
// EJERCICIO: Implementar una aplicacion que utilice el patron fachada.
// Deseamos preparar la lista de articulos que se surtiran a un cliente.
// El sistema tiene cuatro clases: Cliente, Pedido, Detalle, y Articulo.
// Implementar una clase Fachada que haga transparente a la aplicacin
// cuales clases deben ser invocadas para tener todos los detalles del pedido.
// Para ello, crear una intancia de Cliente, una de Pedido, y una de Detalle
// con los articulos correspondientes.
// La aplicacin cliente debera mostrar los articulos incluidos en el pedido y
// el costo total del pedido.
class Pedido {
private Vector<Articulo> articulos;
private int idCliente;
public Pedido (int id){
this.idCliente = id;
articulos = new Vector<Articulo>();
}
public void agregaArticulo(Articulo a){
articulos.add(a);
}
public Vector<Articulo> getPedido(){
return articulos;
}
}
class Cliente {
private int id;
private String name;
private String cityState;
private Vector<Pedido> pedidos;
public Cliente(int id, String n, String city){
this.id = id;
this.name = n;
this.cityState = city;
pedidos = new Vector<Pedido>();
}
public String getName () {
return this.name;
}
public void setName (String n) {
this.name = n;
}
public int getId(){
return this.id;
}
public void crearPedido(Pedido p){
pedidos.add(p);
}
public Pedido obtenerUltimoPedido() {
return pedidos.lastElement();
}
}
class Articulo {
private int id;
private double cost;
private String name;
public Articulo(int id, String n, double c){
this.id = id;
this.name = n;
this.cost = c;
}
public int getNumero () {
return id;
}
public String getNombre () {
return name;
}
public double getPrecio () {
return cost;
}
}
//Incluir dos versiones de implementacion de aplicacion, una con fachada y una sin ella.
// La solucn debe trabajar para un codigo similar al siguiente.
class Fachada {
private Cliente cliente;
public void creaCliente(int id, String name, String CityState){
cliente = new Cliente(id, name, CityState);
}
public void creaPedido(int clientId){
Pedido p = new Pedido(cliente.getId());
cliente.crearPedido(p);
}
public void agregaArticulo(int id, String name, double price){
Pedido p = cliente.obtenerUltimoPedido();
Articulo a = new Articulo(id, name, price);
p.agregaArticulo(a);
}
public Vector<Articulo> getPedido(){
Pedido p = cliente.obtenerUltimoPedido();
return p.getPedido();
}
public int getTotal(){
int t = 0;
Iterator<Articulo> it = cliente.obtenerUltimoPedido().getPedido().iterator();
Articulo a;
while(it.hasNext()){
a = it.next();
t += a.getPrecio();
}
return t;
}
}
public class ConFachada {
public static void main(String argc[] ) {
Articulo articulo;
Vector<Articulo> articulos;
Iterator<Articulo> it;
Fachada orden = new Fachada();
orden.creaCliente(5, "Juan Perez", "Monterrey, N.L.");
//orden.creaDetalle();
orden.creaPedido(5);//Requiere idCliente
orden.agregaArticulo(100, "Alambre calibre 10", 550.90f);
orden.agregaArticulo(150, "Pinzas pericas 16 pulgadas", 380f);
orden.agregaArticulo(200, "Candado Philips reforzado", 270.50f);
System.out.println("Contenido de la orden:");
articulos = orden.getPedido();
it = articulos.iterator();
while(it.hasNext()) {
articulo = it.next();
System.out.println(" " + articulo.getNumero() + " " + articulo.getNombre() + " " + articulo.getPrecio());
}
System.out.println("\t\t TOTAL DE LA ORDEN: " + orden.getTotal());
}
}
/*
public class SinFachada {
public static void main(String argc[] ) {
Articulo articulo;
Vector<Articulo> articulos;
Iterator<Articulo> it;
Cliente c;
Fachada orden = new Fachada();
c = new Cliente(5, "Juan Perez", "Monterrey, N.L.");
//orden.creaDetalle();
c.crearPedido(new Pedido(c.getId()));//Requiere idCliente
c.obtenerUltimoPedido().agregaArticulo(new Articulo(100, "Alambre calibre 10", 550.90f));
c.obtenerUltimoPedido().agregaArticulo(new Articulo(150, "Pinzas pericas 16 pulgadas", 380f));
c.obtenerUltimoPedido().agregaArticulo(new Articulo(200, "Candado Philips reforzado", 270.50f));
System.out.println("Contenido de la orden:");
articulos = c.obtenerUltimoPedido().getPedido();
it = articulos.iterator();
int total = 0;
while(it.hasNext()) {
articulo = it.next();
System.out.println(" " + articulo.getNumero() + " " + articulo.getNombre() + " " + articulo.getPrecio());
total += articulo.getPrecio();
}
System.out.println("\t\t TOTAL DE LA ORDEN: " + total);
}
}
*/
Comments