Пример #1
0
        /// <summary>
        /// En este caso quien decide cómo visita es el cliente y el motivo para implantarlo así, es porque
        /// el cliente tiene el siguiente problema, es que no quiere que se realice cierta operación sobre
        /// todos los elementos de la estructura, sino sobre algunos
        /// </summary>
        private void Exec()
        {
            //...
            ObjectStructure objectStructure = new ObjectStructure();

            objectStructure.Add(new ConcreteElementA());
            objectStructure.Add(new ConcreteElementA());
            objectStructure.Add(new ConcreteElementB());
            objectStructure.Add(new ConcreteElementA());
            //...
            IEnumerator <IElement> elementIterator;

            ConcreteVisitorA concreteVisitorA = new ConcreteVisitorA();

            elementIterator = objectStructure.Iterator();
            while (elementIterator.MoveNext())
            {
                elementIterator.Current.Accept(concreteVisitorA);
            }
            //...
            ConcreteVisitorB concreteVisitorB = new ConcreteVisitorB();

            elementIterator = objectStructure.Iterator();
            while (elementIterator.MoveNext())
            {
                elementIterator.Current.Accept(concreteVisitorB);
            }
            //...
        }
Пример #2
0
        /// <summary>
        /// Aquí el visitor es el que va a visitar a la estructura. La estructura sigue teniendo los datos,
        /// pero en este caso cada visitor es quien decide como visitarlos. El problema que hacerlo así es que
        /// delego en cada visitor cómo se debe recorrer la estructura de objetos y por tanto me obliga a
        /// definirlo en cada visitor.
        /// </summary>
        private void exec()
        {
            //...
            ObjectStructure objectStructure = new ObjectStructure();

            objectStructure.Add(new ConcreteElementA());
            objectStructure.Add(new ConcreteElementA());
            objectStructure.Add(new ConcreteElementB());
            objectStructure.Add(new ConcreteElementA());
            //...
            new ConcreteVisitorA().VisitObjectStructure(objectStructure);
            //...
            new ConcreteVisitorB().VisitObjectStructure(objectStructure);
        }