Design Patterns & Refactoring
Visitor Oliver Haase
HTWG Konstanz
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 1 / 24
Design Patterns & Refactoring Visitor Oliver Haase HTWG - - PowerPoint PPT Presentation
Design Patterns & Refactoring Visitor Oliver Haase HTWG Konstanz Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 1 / 24 Description Classification : Object-based behavioral pattern Purpose : Separate algorithm from the
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 1 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 2 / 24
interface Lis t + sum(): int + chars(): String Client Nil + sum(): int + chars(): String IntElement
+ sum(): int + chars(): String Element
+ sum(): int + chars(): String CharElement
+ sum(): int + chars(): String Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 3 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 4 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 5 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 6 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 7 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 7 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 8 / 24
interface Lis t + accept(Visitor): void Client Nil + accept(Visitor): void IntElement
+ accept(Visitor): void Element
+ accept(Visitor): void CharElement
+ accept(Visitor): void interface Vis itor + visit(Nil): void + visit(IntElement): void + visit(CharElement): void S umVis itor + visit(Nil): void + visit(IntElement): void + visit(CharElement): void Chars Vis itor + visit(Nil): void + visit(IntElement): void + visit(CharElement): void Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 9 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 10 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 11 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 12 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 13 / 24
interface Element + accept(Visitor): void Client ConcreteElementA + accept(Visitor): void interface Vis itor + visit(ConcreteElementA): void + visit(ConcreteElementB): void ConcreteElementB + accept(Visitor): void ConcreteVis itor + visit(ConcreteElementA): void + visit(ConcreteElementB): void
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 14 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 15 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 16 / 24
1 Visitors (see example)
2 Elements
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 17 / 24
ConcreteVis itor ConcreteElement accept(this) visit(this)
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 18 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 19 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 20 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 21 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 22 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 23 / 24
Oliver Haase (HTWG Konstanz) Design Patterns & Refactoring 24 / 24