예제 #1
0
        public CAdminPrototipos()
        {
            //Adicionamos los objetos prototips con los valores iniciales que nos interesan
            CPersona persona = new CPersona("Ciudadano", 18);

            prototipos.Add("Persona", persona);
            //Instanciamos el rendimiento costoso para guardarlo en el administrador con el estado inicial
            CValores valores = new CValores(1);

            prototipos.Add("Valores", valores);
        }
        public static void _Main() //representa al cliente en el UML
        {
            //Creamos Administrador, lo primero q tenemos q hacer
            CAdminPrototipos admin = new CAdminPrototipos();

            //obtenemos dos instancias
            CPersona uno = (CPersona)admin.ObtenPrototipo("Persona");
            CPersona dos = (CPersona)admin.ObtenPrototipo("Persona");

            //Verificamos que tengan los valores del prototipo original
            Console.WriteLine(uno);
            Console.WriteLine(dos);
            Console.WriteLine("--------------");

            //Modificamos el estado, cada uno db d tener su propia instancia
            uno.Nombre = "Ana";
            dos.Nombre = "Chepe";

            //Verificamos q cada qien tenga su estado
            Console.WriteLine(uno);
            Console.WriteLine(dos);
            Console.WriteLine("--------------");

            //Creamos una instancia
            CAuto auto = new CAuto("Nissan", 250000);

            //Lo Colocamos como prototipo
            admin.AdicionaPrototipo("Auto", auto);

            //Obtenemos un objeto de ese prototipo
            CAuto auto2 = (CAuto)admin.ObtenPrototipo("Auto");

            //Cambiamos el estado
            auto2.Modelo = "Honda";

            //Verificamos que tengan los valores del prototipo original
            Console.WriteLine(auto);
            Console.WriteLine(auto2);
            Console.WriteLine("--------------");

            //Obtenemos una instancia de la clase con rendimiento costoso, simplemente obtenemos un clon con la instancia inicial y asi no c recalcula
            CValores val = (CValores)admin.ObtenPrototipo("Valores");

            Console.WriteLine(val);
        }