Pop

Patrones de diseño software 10. Patrón estructural Bridge

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

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...