Powerful Google developer tools for immediate impact! (2023-24 C)
Visitor Pattern By Steve Hayes
1. Visitor
Steve Hayes
Cogent Consulting
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
2. The Problem
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
3. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
4. Show me everything in a consistent manner...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
5. Show me everything in a consistent manner...
... and send it to my friend via email
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
6. Show me everything in a consistent manner...
... and send it to my friend via email
oh, and send it to her phone as well...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
7. Show me everything in a consistent manner...
... and send it to my friend via email
oh, and send it to her phone as well...
and print it.....
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
8. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
9. Some analysis music please...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
10. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
11. Commonality is in the eye of the beholder
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
12. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
13. With a little casual application of
polymorphism...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
14. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
15. Does this look bad to you?
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
16. The solution
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
17. Visitors
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
18. “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”
-- GOF
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
19. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
20. A solution to a problem in a context
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
21. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
22. Headings, Details, ...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
23. and the Iterator
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
24. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
25. Let’s show it in code!
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
26. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
27. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
28. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
29. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
30. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
31. Time for visitors...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
32. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
33. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
34. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
35. Melbourne Pushes Boundaries
The Wolves in the Wall
Redhill Consulting Pty Ltd - Ruby on Rails Plugins
Let's talk about tests, baby...
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
36. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
37. Melbourne Pushes Boundaries
Tim Colebatch
Melbourne is experiencing its biggest growth surge
since the 1960's
The Wolves in the Wall
12.06
Redhill Consulting Pty Ltd - Ruby on Rails Plugins
Here are some Ruby on Rails plugins we've developed...
Let's talk about tests, baby...
Some long babbling about test naming heuristics
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
38. Cool!
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
39. When?
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
40. “an object structure contains many classes
of objects with differing interfaces, and
you want to perform operations on these
objects that depend on their concrete
classes”
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
41. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
42. “many distinct and unrelated operations
need to be performed on objects in an
object structure, and you want to avoid
‘polluting’ their classes with these
operations.Visitor lets you keep unrelated
operations together by defining them in
one class. When the object structure is
shared by many applications, use Visitor to
put operations in just those applications
that need them”
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
43. Show me everything in a consistent manner...
... and send it to my friend via email
oh, and send it to her phone as well...
and print it.....
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
44. “the classes defining the object structure
rarely change, but you often want to
define new operations over the structure.
Changing the object structure classes
requires redefining the interface to all
visitors, which is potentially costly. If the
object structure classes change often, then
it’s probably better to define the
operations in those classes”
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
45. Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
46. Consequences
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
47. Visitor makes adding new operations easy
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
48. A visitor gathers related operations and
separates unrelated ones
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
49. Adding new ConcreteElement classes is
hard
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
50. Visitors can cross object hierarchies
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
51. Visitors can accumulate state
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
52. Visitors may compromise encapsulation
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
53. Discussion
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.