示例#1
0
/*      Antes de comenzar Entra a la clase ChocolateBoiler para analizarla.
 *      cómo puedes ver la caldera define sus estados si está lleno o si se está
 *      hirviendo la mezcla, pero que sucede si decidimos crear otra clase de la
 *      caldera mientras esta está siendo hervida? (los valores se restablecerán y
 *      sucederá una catástrofe).
 */
        static void Main(string[] args)
        {
            //Probaremos los diferentes tipos de singleton y explicaremos sus pros y contras
            //entra a cada una de las clases(LazyChocolateBoiler y EagerChocolateBoiler)
            //para ver las explicaciones

            Console.WriteLine("LazyChocolateBoiler example");
            LazyChocolateBoiler.GetLazyChocolateBoiler();
            LazyChocolateBoiler.GetLazyChocolateBoiler();
            Console.ReadLine();

            Console.WriteLine("EagerChocolateBoiler example");
            EagerChocolateBoiler.GetEagerChocolateBoiler();
            EagerChocolateBoiler.GetEagerChocolateBoiler();
            Console.ReadLine();

            //ahora revisaremos el mismo lazy y el mismo eager con sistemas multi hilos
            Console.WriteLine("now using multithreads and LazyChocolateBoiler");
            // proceso de preparacion para miltiples hilos
            LazyChocolateBoiler.Restart();
            ThreadStart lazyMethodToThread = new ThreadStart(GetLazyChocolateBoiler);
            Thread      lazyFistThread     = new Thread(lazyMethodToThread);
            Thread      lazySecondThread   = new Thread(lazyMethodToThread);

            //fin del proceso de preparacion para miltiples hilos
            lazyFistThread.Start();
            lazySecondThread.Start();
            Console.ReadLine();
            //una de las debilidades del lazy es que en sistemas multi hilos
            //si se realizan mas de 2 peticiones simultaneas podrían crearse varias instancias
            //de la clase, lo que causaría que ya no fuera singleton y el chocolate podría derramarse

            Console.WriteLine("now using multithreads and EagerChocolateBoiler");
            // proceso de preparacion para miltiples hilos
            ThreadStart eagerMethodToThread = new ThreadStart(GetEagerChocolateBoiler);
            Thread      eagerFistThread     = new Thread(eagerMethodToThread);
            Thread      eagerSecondThread   = new Thread(eagerMethodToThread);

            //fin del proceso de preparacion para miltiples hilos
            eagerFistThread.Start();
            eagerSecondThread.Start();
            Console.ReadLine();

            /*
             * para entrar a la clase de este singleton ve al metodo GetDoublecheckedChocolateBoiler
             */
            Console.WriteLine("now using multithreads and Double_checkedChocolateBoile");
            //proceso de preparacion para miltiples hilos
            ThreadStart Double_checkedMethodToThread = new ThreadStart(GetDoublecheckedChocolateBoiler);
            Thread      DoubleCheckedFistThread      = new Thread(Double_checkedMethodToThread);
            Thread      DoubleCheckedSecondThread    = new Thread(Double_checkedMethodToThread);

            //fin del proceso de preparacion para miltiples hilos
            DoubleCheckedFistThread.Start();
            DoubleCheckedSecondThread.Start();
            Console.ReadLine();
        }
示例#2
0
 //estos metodos solo nos permiten cumplir con los requerimientos
 //para usar los multiples hilos
 static void GetEagerChocolateBoiler()
 {
     EagerChocolateBoiler.GetEagerChocolateBoiler();
 }