Ejemplo n.º 1
0
 // Este es el método estático que controla el acceso a la instancia del singleton.
 // En la primera ejecución, crea un objeto singleton y colocalo
 // en el campo estático. En ejecuciones posteriores, devuelve el objeto
 // existente almacenado en el campo estático.
 public static SingletonIngenuo GetInstancia()
 {
     if (_instancia == null)
     {
         _instancia = new SingletonIngenuo();
     }
     return(_instancia);
 }
Ejemplo n.º 2
0
        public static void Run()
        {
            Console.WriteLine("-------------------------");
            Console.WriteLine(" SINGLETON PATTERN ");
            Console.WriteLine("-------------------------");

            Console.WriteLine(" SINGLETON INGENUO ");
            SingletonIngenuo s1 = SingletonIngenuo.GetInstancia();
            SingletonIngenuo s2 = SingletonIngenuo.GetInstancia();

            if (s1 == s2)
            {
                Console.WriteLine("El singleton funciona, ambas variables contienen la misma instancia.");
            }
            else
            {
                Console.WriteLine("El singleton falló, las variables contienen instancias diferentes.");
            }

            Console.WriteLine("\n");


            Console.WriteLine(" SINGLETON THREAD SAFE ");

            Console.WriteLine(
                "{0}\n{1}\n\n{2}\n",
                "Si ves el mismo valor, entonces es que el Singleton ha sido reutilizado (bien!)",
                "Si ves valores distintos, entonces es que se han creado 2 Singletons (mal!)",
                "RESULTADO:"
                );

            Thread proceso1 = new Thread(() =>
            {
                TestSingleton("FOO");
            });

            Thread proceso2 = new Thread(() =>
            {
                TestSingleton("BAR");
            });

            proceso1.Start();
            proceso2.Start();

            proceso1.Join();
            proceso2.Join();

            Console.Write("\n");
        }