dotSITE
Вопросы/Ответы Учебник по ASP.NET Форумы
новости материалы решения форумы группы настройки/о проекте

Visitor

Позволяет описать операцию, производимую над элементами некоторой структуры, позволяет добавлять новые операции, не изменяя класс структуры.

        namespace Visitor_DesignPattern
        {
            using System;

            abstract class Visitor 
            {
                abstract public void VisitElementA(ConcreteElementA a);
                abstract public void VisitElementB(ConcreteElementB b);
            }

            class ConcreteVisitor1 : Visitor
            {
                override public void VisitElementA(ConcreteElementA a)
                {
                    
                }

                override public void VisitElementB(ConcreteElementB b)
                {
                    
                }
            }

            abstract class Element 
            {
                abstract public void Accept(Visitor v);
            }

            class ConcreteElementA : Element 
            {
                public Visitor myVisitor;
                override public void Accept(Visitor v)
                {
                    myVisitor = v;          
                }

                public void OperationA()
                {
                    
                }

                public void DoSomeWork()
                {
                    // . . .

                    myVisitor.VisitElementA(this);      

                    // . . .
                }
            }

            class ConcreteElementB : Element 
            {
                override public void Accept(Visitor v)
                {
                    
                }

                public void OperationB()
                {
                    
                }
            }

            public class Client
            {
                public static int Main(string[] args)
                {           
                    ConcreteElementA eA = new ConcreteElementA();
                    ConcreteElementB eB = new ConcreteElementB();
                    ConcreteVisitor1 v1 = new ConcreteVisitor1();

                    eA.Accept(v1);
                    eA.DoSomeWork();

                    return 0;
                }
            }
        }
        

Back
Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2010 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development