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 articulos; private int idCliente; public Pedido (int id){ this.idCliente = id; articulos = new Vector(); } public void agregaArticulo(Articulo a){ articulos.add(a); } public Vector getPedido(){ return articulos; } } class Cliente { private int id; private String name; private String cityState; private Vector pedidos; public Cliente(int id, String n, String city){ this.id = id; this.name = n; this.cityState = city; pedidos = new Vector(); } 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 getPedido(){ Pedido p = cliente.obtenerUltimoPedido(); return p.getPedido(); } public int getTotal(){ int t = 0; Iterator 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 articulos; Iterator 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 articulos; Iterator 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); } } */