betoesquivel icon

ConFachada and SinFachada Using Facade Design pattern

betoesquivel | PRO | 11/09/14 06:45:17 PM UTC | 0 ⭐ | 393 👁️ | Never ⏰ | []
Java |

5.27 KB

|

None

|

0 👍

/

0 👎

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