Patterns in SOME - Visitor

    技术2022-05-11  70

    Code in C#:   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()          {               // do some work here               // . . .                 // Get visitor to visit               myVisitor.VisitElementA(this);                       // do some more work here               // . . .          }      }        class ConcreteElementB : Element      {          override public void Accept(Visitor v)          {                        }            public void OperationB()          {                        }      }        ///<summary>      ///    Summary description for Client.      ///</summary>      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;          }      } }   Code in SOME:     AVisitor        a_VisitElementA(CConcreteElementA a)        a_VisitElementB(CConcreteElementB b)   CConcreteVisitor1:AVisitor        o_VisitElementA(CConcreteElementA a)        o_VisitElementB(CConcreteElementB b)   AElement        a_Accept(AVisitor v)   CConcreteElementA :AElement, ->AVisitor[m_myVisitor]        o_Accept(AVisitor)               OperatorA()        DoSomeWork()   CConcreteElementB: AElement        o_Accept(AVisitor m_myVisitor)        OperationB()   CClient        main   CClient.main {        CConcreteElementA eA.();        CConcreteElementB eB.();        CConcreteVisitor1 v1.();               //eA.Accept(v1)        //{        // m_myVisitor = v1;        //};               eA.Accept(m_myVisitor = v1);        eA.DoSomeWork()        {      m_myVisitor.VisitElementA(eA);                  //"m_myVisitor.VisitElementA(this)"        }; }

    最新回复(0)