using System.Collections.Generic;
public class ElementoGrafico
public int Id { get; set; }
public string Tipo { get; set; }
public class ModeloLienzo
private List<ElementoGrafico> elementos = new List<ElementoGrafico>();
public void AgregarElemento(ElementoGrafico elemento)
private void NotificarCambios()
Console.WriteLine("Modelo actualizado: Nuevo elemento agregado");
private ModeloLienzo modelo;
public VistaLienzo(ModeloLienzo modelo)
Console.WriteLine("Vista actualizada: Mostrar lienzo");
public class ControladorLienzo
private ModeloLienzo modelo;
private VistaLienzo vista;
public ControladorLienzo(ModeloLienzo modelo, VistaLienzo vista)
public void ManejarAccionUsuario()
ElementoGrafico nuevoElemento = new ElementoGrafico { Id = 1, Tipo = "Cuadrado" };
modelo.AgregarElemento(nuevoElemento);
public class MediadorSesion
private List<ControladorLienzo> controladores = new List<ControladorLienzo>();
public void RegistrarControlador(ControladorLienzo controlador)
controladores.Add(controlador);
public void SincronizarModelo()
Console.WriteLine("Sincronizando modelo entre usuarios...");
static void Main(string[] args)
ModeloLienzo modelo = new ModeloLienzo();
VistaLienzo vista = new VistaLienzo(modelo);
ControladorLienzo controlador = new ControladorLienzo(modelo, vista);
MediadorSesion mediador = new MediadorSesion();
mediador.RegistrarControlador(controlador);
controlador.ManejarAccionUsuario();
mediador.SincronizarModelo();