10. Patrón estructural Bridge
- 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 Bridge que es un patrón parecido al patrón Adapter. Es útil cuando tenemos la necesidad de que la implementación de una abstracción sea modificada en tiempo de ejecución. Lo podemos aplicar cuando queremos que los cambios en la implementación de una abstracción no afecten al cliente ó necesitamos que la implementación de una característica sea compartida entre múltiples objetos.
- 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:
- InterfaceEnvio:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
public interface InterfaceEnvio
{
string poocesarPedido();
string enviar();
string Entregar();
}
}
- Clases EnvioEspaña , EnvioMexico y EnvioPortugal:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class EnvioEspaña:InterfaceEnvio
{
public EnvioEspaña()
{
}
public string poocesarPedido()
{
return "Pedido procesado España";
}
public string enviar()
{
return "Pedido enviado España";
}
public string Entregar()
{
return "Pedido entregado España";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class EnvioMexico:InterfaceEnvio
{
public string poocesarPedido()
{
return "Pedido procesado Mexico";
}
public string enviar()
{
return "Pedido enviado Mexico";
}
public string Entregar()
{
return "Pedido entregado Mexico";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class Envioportugal:InterfaceEnvio
{
public string poocesarPedido()
{
return "Pedido procesado Portugal";
}
public string enviar()
{
return "Pedido enviado Portugal";
}
public string Entregar()
{
return "Pedido entregado Portugal";
}
}
}
- Clase Amazon:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
public abstract class Amazon
{
protected InterfaceEnvio interfaceEnvio;
public Amazon(InterfaceEnvio envio)
{
interfaceEnvio = envio;
}
public string poocesarPedido()
{
return interfaceEnvio.poocesarPedido();
}
public string enviarPaquete()
{
return interfaceEnvio.enviar();
}
public string entregarPaquete()
{
return interfaceEnvio.Entregar();
}
public void asignarEnvio(InterfaceEnvio envio)
{
interfaceEnvio = envio;
}
public InterfaceEnvio obtenerEnvio()
{
return interfaceEnvio;
}
}
}
- Clase RepartoAmazon:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class RepartoAmazon:Amazon
{
private String numPedido;
public RepartoAmazon(String idPedido):base(new EnvioEspaña())
{
this.numPedido = idPedido;
}
public RepartoAmazon(String idPedido, InterfaceEnvio envio):base(envio)
{
this.numPedido = idPedido;
}
public string idPedido()
{
return "Nuestro pedido es " + this.numPedido;
}
}
}
- Clase Program:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Bridge
{
class Program
{
static void Main(string[] args)
{
// En primer lugar crearemos el objeto que representa a la emrpesa de mensajerio
RepartoAmazon reparto = new RepartoAmazon("123456");
// Enviaremos el paquete a España por defecto
Console.WriteLine(reparto.poocesarPedido());
Console.WriteLine(reparto.enviarPaquete());
Console.WriteLine(reparto.entregarPaquete());
Console.ReadLine();
//// Ahora queremos enviar a Mexico
reparto.asignarEnvio(new EnvioMexico());
Console.WriteLine(reparto.poocesarPedido());
Console.WriteLine(reparto.enviarPaquete());
Console.WriteLine(reparto.entregarPaquete());
Console.ReadLine();
}
}
}
No hay comentarios:
Publicar un comentario