Guest User

Untitled

a guest
Oct 29th, 2016
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 0.80 KB | None | 0 0
  1. // All copyright is dedicated to the public domain with Creative Commons Zero 1.0 Universal.
  2. // Anyone may do whatever they wish with this code.
  3.  
  4. package main
  5.  
  6. import "fmt"
  7.  
  8. type Visitor interface {
  9.     Visit(e Element)
  10. }
  11.  
  12. type Element interface {
  13.     Accept(v Visitor)
  14. }
  15.  
  16. type ConcreteElement1 struct {}
  17.  
  18. func (c ConcreteElement1) Accept(v Visitor) {
  19.     v.Visit(c)
  20. }
  21.  
  22. type ConcreteElement2 struct {}
  23.  
  24. func (c ConcreteElement2) Accept(v Visitor) {
  25.     v.Visit(c)
  26. }
  27.  
  28. type Visitor1 struct{}
  29.  
  30. func (v Visitor1) Visit(e Element) {
  31.     switch e.(type) {
  32.     case ConcreteElement1:
  33.         fmt.Println("ConcreteElement1 in Visitor1")
  34.     case ConcreteElement2:
  35.         fmt.Println("ConcreteElement2 in Visitor1")
  36.     }
  37. }
  38.  
  39. func main() {
  40.     var e Element = ConcreteElement1{}
  41.     var v Visitor2 = Visitor2{}
  42.     e.Accept(v)
  43. }
Advertisement
Add Comment
Please, Sign In to add comment