8. Patrón estructural Facade
- Hola a todos.Seguimos con nuestro curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
- En esta ocasión veremos el patrón de diseño Facade. Este patrón busca simplificar el sistema, desde el punto de vista del cliente, proporcionando una interfaz unificada para un conjunto de subsistemas. Se debe utilizar cuando:
- Se quiera proporcionar una interfaz sencilla para un subsistema complejo.
- Se quiera desacoplar un subsistema de sus clientes y de otros subsistemas, haciéndolo más independiente y portable.
- El modelo de clases que utilizaremos para el ejemplo es el siguiente:
- En el siguiente vídeo tenéis un ejemplo de este patrón de diseño.
- Os dejo el código de las diferentes clases vistas en el vídeo:
- Clases persona, Desarrollador, comercial y comprador:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
public abstract class Persona
{
}
class Desarrollador:Persona
{
}
class Comercial:Persona
{
}
class Comprador:Persona
{
}
}
- Clase Quejas:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
class Quejas
{
public string quejas(Comprador comprador)
{
return ("Escuchando quejas comprador");
}
public string quejas(Comercial comercial)
{
return ("Escuchando quejas comercial");
}
public string quejas(Desarrollador desarrollador)
{
return ("Escuchando quejas desarrollador");
}
}
}
- Clase Pedidos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
class Pedidos
{
public int precioProducto(Comprador comprador)
{
return 10;
}
public int comisionPedido(Comercial comercial)
{
return 5;
}
}
}
- Clase Empresa:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
class Empresa
{
public Quejas q;
public Pedidos p;
public Empresa()
{
q = new Quejas();
p = new Pedidos();
}
private string quejas(Comprador comprador)
{
return q.quejas(comprador);
}
private string quejas(Comercial comercial)
{
return q.quejas(comercial);
}
private string quejas(Desarrollador desarrollador)
{
return q.quejas(desarrollador);
}
public void EscucharQuejas(Persona p)
{
if (p is Comprador)
quejas((Comprador)p);
else if (p is Desarrollador)
quejas((Desarrollador)p);
else
quejas((Comercial)p);
}
public int hacerPedido(Comercial comercial, Comprador cliente)
{
return p.comisionPedido(comercial)+ p.precioProducto(cliente);
}
}
}
- Clase Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Facade
{
class Program
{
static void Main(string[] args)
{
Desarrollador programador = new Desarrollador();
Comprador cliente = new Comprador();
Comercial comercial = new Comercial();
//SIN FACADE
Quejas queja = new Quejas();
queja.quejas(comercial);
queja.quejas(programador);
queja.quejas(cliente);
Pedidos pedido = new Pedidos();
int totalPrecioPedido = 0;
totalPrecioPedido = pedido.comisionPedido(comercial);
totalPrecioPedido += pedido.precioProducto(cliente);
//CON FACADE
Empresa empresa = new Empresa();
empresa.EscucharQuejas(programador);
empresa.EscucharQuejas(comercial);
empresa.EscucharQuejas(programador);
totalPrecioPedido= empresa.hacerPedido(comercial, cliente);
}
}
}
No hay comentarios:
Publicar un comentario