(NET) NET (2016)

Visitor in VB.NET

Defines a new operation to a class without change

Return


Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. Different visitor objects define different operations.







Please download project with this source code from https://github.com/ViacheslavUKR/StandardDisignOopPattern



   1:      ' Visitor Design Pattern.
   2:      ' See description in //www.vb-net.com/ProgramTheory/Visitor.htm
   3:      Class MainApp
   4:          Public Shared Sub Main()
   5:              ' Setup structure
   6:              Dim o As New ObjectStructure()
   7:              o.Attach(New ConcreteElementA())
   8:              o.Attach(New ConcreteElementB())
   9:              ' Create visitor objects
  10:              Dim v1 As New ConcreteVisitor1()
  11:              Dim v2 As New ConcreteVisitor2()
  12:              ' Structure accepting visitors
  13:              o.Accept(v1)
  14:              o.Accept(v2)
  15:              ' Wait for user
  16:              Console.ReadKey()
  17:          End Sub
  18:      End Class
  19:   
  20:      ' The 'Visitor' abstract class
  21:      MustInherit Class Visitor
  22:          Public MustOverride Sub VisitConcreteElementA(concreteElementA As ConcreteElementA)
  23:          Public MustOverride Sub VisitConcreteElementB(concreteElementB As ConcreteElementB)
  24:      End Class
  25:   
  26:      ' A 'ConcreteVisitor' class
  27:      Class ConcreteVisitor1
  28:          Inherits Visitor
  29:          Public Overrides Sub VisitConcreteElementA(concreteElementA As ConcreteElementA)
  30:              Console.WriteLine("{0} visited by {1}", concreteElementA.[GetType]().Name, Me.[GetType]().Name)
  31:          End Sub
  32:          Public Overrides Sub VisitConcreteElementB(concreteElementB As ConcreteElementB)
  33:              Console.WriteLine("{0} visited by {1}", concreteElementB.[GetType]().Name, Me.[GetType]().Name)
  34:          End Sub
  35:      End Class
  36:   
  37:      ' A 'ConcreteVisitor' class
  38:      Class ConcreteVisitor2
  39:          Inherits Visitor
  40:          Public Overrides Sub VisitConcreteElementA(concreteElementA As ConcreteElementA)
  41:              Console.WriteLine("{0} visited by {1}", concreteElementA.[GetType]().Name, Me.[GetType]().Name)
  42:          End Sub
  43:          Public Overrides Sub VisitConcreteElementB(concreteElementB As ConcreteElementB)
  44:              Console.WriteLine("{0} visited by {1}", concreteElementB.[GetType]().Name, Me.[GetType]().Name)
  45:          End Sub
  46:      End Class
  47:   
  48:      ' The 'Element' abstract class
  49:      MustInherit Class Element
  50:          Public MustOverride Sub Accept(visitor As Visitor)
  51:      End Class
  52:   
  53:      ' A 'ConcreteElement' class
  54:      Class ConcreteElementA
  55:          Inherits Element
  56:          Public Overrides Sub Accept(visitor As Visitor)
  57:              visitor.VisitConcreteElementA(Me)
  58:          End Sub
  59:          Public Sub OperationA()
  60:          End Sub
  61:      End Class
  62:   
  63:      ' A 'ConcreteElement' class
  64:      Class ConcreteElementB
  65:          Inherits Element
  66:          Public Overrides Sub Accept(visitor As Visitor)
  67:              visitor.VisitConcreteElementB(Me)
  68:          End Sub
  69:          Public Sub OperationB()
  70:          End Sub
  71:      End Class
  72:   
  73:      ' The 'ObjectStructure' class
  74:      Class ObjectStructure
  75:          Private _elements As New List(Of Element)()
  76:          Public Sub Attach(element As Element)
  77:              _elements.Add(element)
  78:          End Sub
  79:          Public Sub Detach(element As Element)
  80:              _elements.Remove(element)
  81:          End Sub
  82:          Public Sub Accept(visitor As Visitor)
  83:              For Each element As Element In _elements
  84:                  element.Accept(visitor)
  85:              Next
  86:          End Sub
  87:      End Class




See also:
Creational Patterns Structural Patterns Behavioral Patterns

Comments ( )
<00>  <01>  <02>  <03>  <04>  <05>  <06>  <07>  <08>  <09>  <10>  <11>  <12>  <13>  <14>  <15>  <16>  <17>  <18>  <19>  <20>  <21>  <22>  <23
Link to this page: //www.vb-net.com/ProgramTheory/Visitor.htm
<SITEMAP>  <MVC>  <ASP>  <NET>  <DATA>  <KIOSK>  <FLEX>  <SQL>  <NOTES>  <LINUX>  <MONO>  <FREEWARE>  <DOCS>  <ENG>  <CHAT ME>  <ABOUT ME>  < THANKS ME>