Advertisement
Fhernd

Factoria.cs

Aug 16th, 2014
970
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.94 KB | None | 0 0
  1. using System;
  2. using System.Reflection;
  3.  
  4. namespace Recetas.Cap03
  5. {
  6.     // Interfaz común para plugins:
  7.     public interface IPlugin
  8.     {
  9.         string Descripcion
  10.         {
  11.             get;
  12.             set;
  13.         }
  14.         // Inicia un plugin:
  15.         void Iniciar();
  16.         // Deteiene un plugin:
  17.         void Detener();
  18.     }
  19.    
  20.     // Clase abstracta común para todas clases concretas
  21.     // de plugins:
  22.     public abstract class PluginAbstracto: IPlugin
  23.     {
  24.         private string descripcion;
  25.        
  26.         // Establece y obtiene la descripción del plugin:
  27.         public string Descripcion
  28.         {
  29.             get
  30.             {
  31.                 return descripcion;
  32.             }
  33.             set
  34.             {
  35.                 descripcion = value;
  36.             }
  37.         }
  38.        
  39.         // Las clases derivadas deben crear la implementación
  40.         // concreta de los métodos abstractos:
  41.         public abstract void Iniciar();
  42.         public abstract void Detener();
  43.     }
  44.    
  45.     // Plugin concreto:
  46.     public class PluginBasico : PluginAbstracto
  47.     {
  48.         // Implementación particular de `Iniciar`:
  49.         public override void Iniciar()
  50.         {
  51.             Console.WriteLine ("Descripción: {0}\n\tEstado: Iniciando", Descripcion);
  52.         }
  53.        
  54.         // Implementación particular de `Detener`:
  55.         public override void Detener()
  56.         {
  57.             Console.WriteLine ("Descripción: {0}\n\tEstado: Deteniendo", Descripcion);
  58.         }
  59.     }
  60.    
  61.     // Representa la factoría de instancias de plugins:
  62.     public sealed class FactoriaPlugins
  63.     {
  64.         public static IPlugin CrearPlugin(string assembly, string nombrePlugin, string descripcion)
  65.         {
  66.             // Obtención de la representación Type del plugin:
  67.             Type tipo = Type.GetType(nombrePlugin + ", " + assembly);
  68.            
  69.             // Obtención de constructor:
  70.             ConstructorInfo ctorInfo = tipo.GetConstructor( Type.EmptyTypes);
  71.            
  72.             // Crear el objeto:
  73.             IPlugin plugin = ctorInfo.Invoke(null) as IPlugin;
  74.            
  75.             // Establece una descripción para el plugin:
  76.             plugin.Descripcion = descripcion;
  77.            
  78.             return plugin;
  79.         }
  80.     }
  81.    
  82.     // «Client»
  83.     public sealed class Aplicacion
  84.     {
  85.         public static void Main()
  86.         {
  87.             Console.WriteLine();
  88.            
  89.             // Creación de un plugin utilziando `FactoriaPlugins`:
  90.             IPlugin plugin = FactoriaPlugins.CrearPlugin(
  91.                 "Factoria",
  92.                 "Recetas.Cap03.PluginBasico",
  93.                 "Plugin de capacidades básicas"
  94.             );
  95.            
  96.             // Inicio de la carga del plugin:
  97.             plugin.Iniciar();
  98.            
  99.             // Detiene el plugin:
  100.             plugin.Detener();
  101.            
  102.             Console.WriteLine ();
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement