using System.Collections.Generic;
public TipoForma Tipo { get; set; }
public int X { get; set; }
public int Y { get; set; }
public int Tamaño { get; set; }
public string Color { get; set; }
public Forma(TipoForma tipo, int x, int y, int tamaño, string color)
public class ModeloLienzo
private List<Forma> formas = new List<Forma>();
private List<VistaLienzo> vistas = new List<VistaLienzo>();
public void AgregarVista(VistaLienzo vista)
public void AgregarForma(Forma forma)
private void NotificarCambios()
foreach (var vista in vistas)
private ModeloLienzo modelo;
public VistaLienzo(ModeloLienzo modelo)
modelo.AgregarVista(this);
Console.WriteLine("Vista actualizada con las nuevas formas.");
public class ControladorLienzo
private ModeloLienzo modelo;
public ControladorLienzo(ModeloLienzo modelo)
public void DibujarForma(TipoForma tipo, int x, int y, int tamaño, string color)
var forma = new Forma(tipo, x, y, tamaño, color);
modelo.AgregarForma(forma);
public class MediadorSesion
private List<ControladorLienzo> controladores = new List<ControladorLienzo>();
public void AgregarControlador(ControladorLienzo controlador)
controladores.Add(controlador);
public void Sincronizar()
Console.WriteLine("Sincronizando formas entre usuarios.");
static void Main(string[] args)
ModeloLienzo modelo = new ModeloLienzo();
VistaLienzo vista = new VistaLienzo(modelo);
ControladorLienzo controlador = new ControladorLienzo(modelo);
MediadorSesion mediador = new MediadorSesion();
mediador.AgregarControlador(controlador);
controlador.DibujarForma(TipoForma.Circulo, 100, 100, 50, "Rojo");
controlador.DibujarForma(TipoForma.Cuadrado, 200, 200, 50, "Azul");