Skip to content

Instantly share code, notes, and snippets.

@Mildgwey
Last active April 15, 2024 23:34
Show Gist options
  • Save Mildgwey/145fb0a756837527d7fa9c627f4c5628 to your computer and use it in GitHub Desktop.
Save Mildgwey/145fb0a756837527d7fa9c627f4c5628 to your computer and use it in GitHub Desktop.

Actividad del Patrón Observador en C#

Nombre del Alumno: Sanchez Vargas David

No. Control: 20210638

Descrpicion de la Actividad

Objetivo: Implementar el patrón Observador para crear un sistema de notificaciones en un escenario de subasta en línea, donde los participantes reciben actualizaciones cuando cambia el precio de un artículo.


Tareas

  • Crear una clase Subasta que maneje el precio actual del artículo y notifique a todos los observadores cuando este cambie.
  • Crear una clase Participante que actúe como observador, recibiendo notificaciones cuando el precio cambia.
  • Implementar la lógica para suscribir y desuscribir participantes a las notificaciones de la subasta.

Codigo en C#

using System;
using System.Collections.Generic;

// Interfaz Observador
public interface IObservador
{
    void Actualizar(int precio);
}

// Clase Subasta (Sujeto)
public class Subasta
{
    private int precioActual;
    private List<IObservador> observadores = new List<IObservador>();

    public void AgregarObservador(IObservador observador)
    {
        observadores.Add(observador);
    }

    public void QuitarObservador(IObservador observador)
    {
        observadores.Remove(observador);
    }

    public void NotificarObservadores()
    {
        foreach (var observador in observadores)
        {
            observador.Actualizar(precioActual);
        }
    }

    public void EstablecerPrecio(int precio)
    {
        precioActual = precio;
        NotificarObservadores();
    }
}

// Clase Participante (Observador)
public class Participante : IObservador
{
    private string nombre;

    public Participante(string nombre)
    {
        this.nombre = nombre;
    }

    public void Actualizar(int precio)
    {
        Console.WriteLine($"{nombre} ha sido notificado. El precio actual es {precio}");
    }
}

// Clase Program (para probar el sistema)
class Program
{
    static void Main(string[] args)
    {
        // Instanciación de la subasta
        Subasta subasta = new Subasta();

        // Creación de participantes y suscripción a la subasta
        Participante participante1 = new Participante("Juan");
        Participante participante2 = new Participante("María");

        subasta.AgregarObservador(participante1);
        subasta.AgregarObservador(participante2);

        // Cambio de precio y notificación a los participantes
        subasta.EstablecerPrecio(100);
    }
}

Objetivo de Aprendizaje

  • Comprender cómo los objetos en un programa pueden comunicarse entre sí sin estar fuertemente acoplados, mediante el uso del patrón Observador.
  • Resolver un problema común en sistemas que requieren interacciones basadas en eventos, aplicando un patrón de diseño clásico.

Codigo en Ejecucion

ObserverEje

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