Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // All copyright is dedicated to the public domain with Creative Commons Zero 1.0 Universal.
- // Anyone may do whatever they wish with this code.
- package main
- import "fmt"
- type Visitor interface {
- Visit(e Element)
- }
- type Element interface {
- Accept(v Visitor)
- }
- type ConcreteElement1 struct {}
- func (c ConcreteElement1) Accept(v Visitor) {
- v.Visit(c)
- }
- type ConcreteElement2 struct {}
- func (c ConcreteElement2) Accept(v Visitor) {
- v.Visit(c)
- }
- type Visitor1 struct{}
- func (v Visitor1) Visit(e Element) {
- switch e.(type) {
- case ConcreteElement1:
- fmt.Println("ConcreteElement1 in Visitor1")
- case ConcreteElement2:
- fmt.Println("ConcreteElement2 in Visitor1")
- }
- }
- func main() {
- var e Element = ConcreteElement1{}
- var v Visitor2 = Visitor2{}
- e.Accept(v)
- }
Advertisement
Add Comment
Please, Sign In to add comment