Pop

Patrones de diseño software 8. Patrón estructural Facade

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

    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...