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.
- 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.
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);
}
}
- 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.