Skip to content

Instantly share code, notes, and snippets.

@Danielusuario
Last active May 27, 2024 06:32
Show Gist options
  • Save Danielusuario/e55846d21bd192e4ace79f0558c5bcf6 to your computer and use it in GitHub Desktop.
Save Danielusuario/e55846d21bd192e4ace79f0558c5bcf6 to your computer and use it in GitHub Desktop.

Nombre: Osvaldo Daniel Ramirez

NO.C: 20210617

Actividad de Patrones de Diseño: Fábrica Abstracta y Fachada en C#

Descripción de la Actividad Objetivo: Implementar los patrones de diseño Fábrica Abstracta y Fachada para facilitar la creación y manejo de diferentes modelos de celulares en una tienda virtual.

Escenario

Una tienda en línea de tecnología que ofrece diversos modelos y marcas de celulares, cada uno con especificaciones y capacidades distintas. La tienda busca ofrecer una interfaz simplificada para que los clientes puedan seleccionar y configurar sus celulares fácilmente.

Tareas

Utilizar el patrón Fábrica Abstracta para crear familias de objetos relacionados sin especificar sus clases concretas. Implementar el patrón Fachada para proporcionar una interfaz simplificada al sistema de creación y configuración de celulares. Desarrollar diferentes fábricas para marcas específicas de celulares que produzcan modelos con características distintas. Crear una interfaz de usuario que utilice la fachada para permitir a los clientes configurar y ordenar sus celulares fácilmente. Implementación

1. Definición de Clases

Interfaz FabricaCelulares:

Métodos para crear productos como crearSmartphone y crearTablet. Clase SamsungFactory: Implementa FabricaCelulares.

Produce celulares y tablets Samsung con configuraciones específicas. Clase AppleFactory: Implementa FabricaCelulares.

Produce iPhones y iPads con características definidas. Clase FachadaTiendaCelulares:

Proporciona métodos simples para configurar y ordenar celulares, como ordenarSmartphone y ordenarTablet. Utiliza las fábricas según la elección del usuario para crear los productos.

Explicacion en base al codigo:

Interfaz FabricaCelulares:
La interfaz FabricaCelulares define un contrato para las fábricas de celulares. 
En el código, esta interfaz contiene los métodos CrearSmartphone y CrearTablet, 
que son responsables de crear objetos Smartphone y Tablet, respectivamente. 
Esto permite que cualquier clase que implemente esta interfaz pueda fabricar diferentes tipos de celulares.

Clase SamsungFactory:
La clase SamsungFactory implementa la interfaz FabricaCelulares. En el código,
esta clase es responsable de producir celulares y tablets de la marca Samsung con configuraciones específicas. 
Contiene métodos CrearSmartphone y CrearTablet que devuelven objetos Smartphone y Tablet con nombres y configuraciones específicas de Samsung.

Clase AppleFactory:
La clase AppleFactory también implementa la interfaz FabricaCelulares. 
En el código, esta clase es responsable de producir iPhones y iPads con características definidas de Apple. 
Al igual que SamsungFactory, contiene métodos CrearSmartphone y CrearTablet que devuelven objetos Smartphone y Tablet con nombres y configuraciones específicas de Apple.

Clase FachadaTiendaCelulares:
La clase FachadaTiendaCelulares actúa como una fachada para la tienda de celulares, 
proporcionando una interfaz simplificada para que los clientes configuren y ordenen celulares. 
En el código, esta clase contiene métodos como OrdenarSmartphone y OrdenarTablet, 
que los clientes utilizan para realizar pedidos de celulares. 
La fachada se encarga de interactuar con las fábricas adecuadas (por ejemplo, SamsungFactory o AppleFactory) según la elección del cliente para crear el producto deseado. Una vez creado el producto, 
la fachada puede manejar cualquier configuración adicional necesaria y proporcionar al cliente una confirmación del pedido junto con detalles del producto configurado.

2. Lógica de Interacción

Los clientes visitan la tienda en línea y, a través de la interfaz proporcionada por la FachadaTiendaCelulares, seleccionan el tipo de dispositivo y la marca. La fachada se encarga de interactuar con la fábrica adecuada para crear el producto deseado y manejar cualquier configuración adicional necesaria. El sistema proporciona al cliente una confirmación del pedido junto con detalles del producto configurado.

3. Prueba del Sistema

Verificar que la FachadaTiendaCelulares gestiona correctamente las solicitudes y comunica con las fábricas específicas para crear los productos. Simular pedidos de diferentes marcas y modelos para asegurar que los productos se crean y configuran correctamente. Evaluar la interfaz de usuario para asegurar que es intuitiva y facilita el proceso de selección y compra para los clientes.

image

Codigo del programa

using System;

// Interfaz para los productos
public interface IProducto
{
    string ObtenerNombre(); // Método para obtener el nombre del producto
}

// Productos concretos
public class Smartphone : IProducto
{
    private readonly string _nombre;

    public Smartphone(string nombre)
    {
        _nombre = nombre;
    }

    public string ObtenerNombre()
    {
        return _nombre;
    }
}

public class Tablet : IProducto
{
    private readonly string _nombre;

    public Tablet(string nombre)
    {
        _nombre = nombre;
    }

    public string ObtenerNombre()
    {
        return _nombre;
    }
}

// Interfaz para la fábrica de productos
public interface IFabricaCelulares
{
    IProducto CrearSmartphone(); // Método para crear un smartphone
    IProducto CrearTablet(); // Método para crear una tablet
}

// Fábricas concretas
public class SamsungFactory : IFabricaCelulares
{
    public IProducto CrearSmartphone()
    {
        return new Smartphone("Samsung Galaxy"); // Crea un smartphone Samsung Galaxy
    }

    public IProducto CrearTablet()
    {
        return new Tablet("Samsung Galaxy Tab"); // Crea una tablet Samsung Galaxy Tab
    }
}

public class AppleFactory : IFabricaCelulares
{
    public IProducto CrearSmartphone()
    {
        return new Smartphone("iPhone"); // Crea un iPhone
    }

    public IProducto CrearTablet()
    {
        return new Tablet("iPad"); // Crea un iPad
    }
}

// Fachada para la tienda de celulares
public class FachadaTiendaCelulares
{
    private readonly IFabricaCelulares _fabrica; // Referencia a la fábrica de celulares

    public FachadaTiendaCelulares(IFabricaCelulares fabrica)
    {
        _fabrica = fabrica; // Asigna la fábrica de celulares a la fachada
    }

    public void OrdenarSmartphone()
    {
        IProducto smartphone = _fabrica.CrearSmartphone(); // Crea un smartphone utilizando la fábrica
        Console.WriteLine("Se ha ordenado un smartphone: " + smartphone.ObtenerNombre()); // Imprime el nombre del smartphone ordenado
    }

    public void OrdenarTablet()
    {
        IProducto tablet = _fabrica.CrearTablet(); // Crea una tablet utilizando la fábrica
        Console.WriteLine("Se ha ordenado una tablet: " + tablet.ObtenerNombre()); // Imprime el nombre de la tablet ordenada
    }
}

// Clase principal
class Program
{
    static void Main(string[] args)
    {
        // Crear fábricas concretas
        IFabricaCelulares samsungFactory = new SamsungFactory(); // Fábrica para productos Samsung
        IFabricaCelulares appleFactory = new AppleFactory(); // Fábrica para productos Apple

        // Crear fachadas para las tiendas de celulares
        FachadaTiendaCelulares samsungStore = new FachadaTiendaCelulares(samsungFactory); // Fachada para la tienda de Samsung
        FachadaTiendaCelulares appleStore = new FachadaTiendaCelulares(appleFactory); // Fachada para la tienda de Apple

        // Simular orden de productos
        Console.WriteLine("Ordenando productos de Samsung:");
        samsungStore.OrdenarSmartphone(); // Ordenar un smartphone Samsung
        samsungStore.OrdenarTablet(); // Ordenar una tablet Samsung

        Console.WriteLine("\nOrdenando productos de Apple:");
        appleStore.OrdenarSmartphone(); // Ordenar un iPhone
        appleStore.OrdenarTablet(); // Ordenar un iPad
    }
}
@IoTeacher
Copy link

revisado

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment