Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2. using System.IO;
  3.  
  4. namespace Articulos.Cap04
  5. {
  6.     ///<summary>
  7.     /// Representa la entidad caldera. Mide la temperatura y la presión.
  8.     ///</summary>
  9.     class Caldera
  10.     {
  11.         private int temperatura;
  12.         private int presion;
  13.        
  14.         // Obtiene la temperatura actual de la caldera:
  15.         public int Temperatura
  16.         {
  17.             get
  18.             {
  19.                 return temperatura;
  20.             }
  21.         }
  22.        
  23.         // Obtiene la presión actual de la caldera:
  24.         public int Presion
  25.         {
  26.             get
  27.             {
  28.                 return presion;
  29.             }
  30.         }
  31.        
  32.         // Crea una instancia de `Caldera` con la temperatura
  33.         // y la presión actuales.
  34.         public Caldera (int temp, int presion)
  35.         {
  36.             temperatura = temp;
  37.             this.presion = presion;
  38.         }
  39.     }
  40.    
  41.     ///<summary>
  42.     /// Clase controladora del estado de la calderea.
  43.     ///</summary>
  44.     class ControladorCaldera
  45.     {
  46.         public delegate void RegistroCalderaEventHandler(string estado);
  47.        
  48.         public event RegistroCalderaEventHandler RegistroCaldera;
  49.        
  50.         // Se encarga de llevar el control de la caldera.
  51.         // Avisa cuando se debe realizar un mantenimiento:
  52.         public void ProcesoRegistro()
  53.         {
  54.             string comentario = "O.K.";
  55.             Caldera c = new Caldera(100, 12);
  56.            
  57.             int t = c.Temperatura;
  58.             int p = c.Presion;
  59.            
  60.             if (t> 150 || t > 80 || p < 12 || p > 15)
  61.             {
  62.                 comentario = "Se requiere mantenimiento";
  63.             }
  64.            
  65.             OnEventoRegistro("Información de Registro:\n");
  66.             OnEventoRegistro("\tTemperatura: " + t.ToString() + "\n\tPresión: " + p.ToString() );
  67.             OnEventoRegistro("\n\tMensaje: " + comentario);
  68.         }
  69.        
  70.         // Invoca indirectamente a los listeners interesados
  71.         // en los mensajes de mantenimiento de la caldera:
  72.         protected void OnEventoRegistro(string message)
  73.         {
  74.             if (RegistroCaldera != null)
  75.             {
  76.                 RegistroCaldera(message);
  77.             }
  78.         }
  79.     }
  80.    
  81.     ///<summary>
  82.     /// Control de registro del estado de la caldera a archivo de texto plano.
  83.     ///</summary>
  84.     class RegistroArchivo
  85.     {
  86.         FileStream fs;
  87.         StreamWriter sw;
  88.        
  89.         public RegistroArchivo(string nombreArchivo)
  90.         {
  91.             fs = new FileStream(nombreArchivo, FileMode.Append, FileAccess.Write);
  92.             sw = new StreamWriter(fs);
  93.         }
  94.        
  95.         public void Registrar(string info)
  96.         {
  97.             sw.WriteLine(info);
  98.         }
  99.        
  100.         public void CerrarArchivo()
  101.         {
  102.             sw.Close();
  103.             fs.Close();
  104.         }
  105.     }
  106.    
  107.     public class Aplicacion
  108.     {
  109.         static void Registrar(string info)
  110.         {
  111.             Console.WriteLine(info);
  112.         }
  113.        
  114.         public static void Main()
  115.         {
  116.             // Creación de instancia de registro en archivo de texto:
  117.             RegistroArchivo registroArchivo = new RegistroArchivo("registrocaldera.txt");
  118.            
  119.             ControladorCaldera eventoControladorCaldera = new ControladorCaldera();
  120.            
  121.             // Agrega event handler para mensajería sobre la salida estándar:
  122.             eventoControladorCaldera.RegistroCaldera += new ControladorCaldera.RegistroCalderaEventHandler(Registrar);
  123.             // Agrega event handler para mensajería sobre archivo de texto plano:
  124.             eventoControladorCaldera.RegistroCaldera += new ControladorCaldera.RegistroCalderaEventHandler(registroArchivo.Registrar);
  125.            
  126.             eventoControladorCaldera.ProcesoRegistro();
  127.            
  128.             registroArchivo.CerrarArchivo();
  129.         }
  130.     }
  131. }