// clase Subject que gestiona una lista de dispositivos public class GestorMensajes { public GestorMensajes(){ m_dispositivos = new ArrayList(); } // lista de dispositivos subscritos private ArrayList m_dispositivos; // Subscribir dispositivos al gestor de mensajes public void Attach(IDispositivo disp){ m_dispositivos.Add(disp); } // Cancela la subscripción de un dispositivo public void Dettach(IDispositivo disp){ m_dispositivos.Remove(disp); } // boadcasting del mensaje a todos los disp subscritos public void SendMessage(string usuario, string texto){ DatosMensaje msg = new DatosMensaje(usuario, texto); foreach (IDispositivo disp in m_dispositivos){ disp.SendMessage(msg); } } } // interfaz que implementan todos los concrete observers public interface IDispositivo { void SendMessage(DatosMensaje msg); } // observer que lanza mensaje a consola public class Consola : IDispositivo { public void SendMessage(DatosMensaje msg){ Console.WriteLine("{0}: {1}", msg.Usuario, msg.Mensaje ); } } // observer que lanza mensaje a fichero public class Fichero : IDispositivo{ private string m_nombreFichero; public Fichero(string nombre){ m_nombreFichero = nombre; } public void SendMessage(DatosMensaje msg){ StreamWriter writer = new StreamWriter(m_nombreFichero, true); writer.WriteLine("{0}: {1}", msg.Usuario, msg.Mensaje); writer.Close(); } } // clase que contiene el Main class Class1 { // Prueba el sistema de mensajes static void Main(string[] args) { GestorMensajes gestor = new GestorMensajes(); IDispositivo disp1 = new Consola(); IDispositivo disp2 = new Fichero("fich1.txt"); IDispositivo disp3 = new Fichero("fich2.txt"); gestor.Attach(disp1); // se envía un mensaje a la consola gestor.SendMessage("usu1", "mensaje 1"); gestor.Attach(disp2); // se envía un mensaje a la consola y fich1.txt gestor.SendMessage("usu1", "mensaje 2"); gestor.Attach(disp3); // se envía a cosola, fich1.txt y fich2.txt gestor.SendMessage("usu1", "mensaje 3"); gestor.Dettach(disp1); // se envía a fich1.txt y fich2.txt gestor.SendMessage("usu1", "mensaje 4"); } } Fuente 1 |