SlideShare a Scribd company logo
1 of 53
Download to read offline
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.
The Problem



 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
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.
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.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Some analysis music please...




              Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
             Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
The solution



 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Visitors



    Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
   Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
“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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Headings, Details, ...




 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
and the Iterator




 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Time for visitors...




          Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
         Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
Cool!



   Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
  Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
When?



 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
“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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
“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.
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.
“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.
Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Consequences



 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
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.
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.
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.
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.
Visitors can accumulate state




   Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
  Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Visitors may compromise encapsulation




       Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
      Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.
Discussion



 Copyright Cogent Consulting Pty Ltd (http://www.cogentconsulting.com.au)
Licensed under a Creative Commons Attribution-Noncommercial 3.0 License.

More Related Content

More from melbournepatterns

Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
melbournepatterns
 
Move Accumulation To Collecting Parameter
Move Accumulation To Collecting ParameterMove Accumulation To Collecting Parameter
Move Accumulation To Collecting Parameter
melbournepatterns
 
Command Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 NovCommand Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 Nov
melbournepatterns
 

More from melbournepatterns (20)

Code Contracts API In .Net
Code Contracts API In .NetCode Contracts API In .Net
Code Contracts API In .Net
 
LINQ/PLINQ
LINQ/PLINQLINQ/PLINQ
LINQ/PLINQ
 
Gpu Cuda
Gpu CudaGpu Cuda
Gpu Cuda
 
Facade Pattern
Facade PatternFacade Pattern
Facade Pattern
 
Phani Kumar - Decorator Pattern
Phani Kumar - Decorator PatternPhani Kumar - Decorator Pattern
Phani Kumar - Decorator Pattern
 
Composite Pattern
Composite PatternComposite Pattern
Composite Pattern
 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Pattern
 
Prototype Design Pattern
Prototype Design PatternPrototype Design Pattern
Prototype Design Pattern
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Pattern
 
A Little Lisp
A Little LispA Little Lisp
A Little Lisp
 
State Pattern in Flex
State Pattern in FlexState Pattern in Flex
State Pattern in Flex
 
Active Object
Active ObjectActive Object
Active Object
 
Extract Composite Talk Andy
Extract Composite Talk AndyExtract Composite Talk Andy
Extract Composite Talk Andy
 
Selenium Interpreter
Selenium InterpreterSelenium Interpreter
Selenium Interpreter
 
Move Accumulation To Collecting Parameter
Move Accumulation To Collecting ParameterMove Accumulation To Collecting Parameter
Move Accumulation To Collecting Parameter
 
Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto
 
Mpg Feb08 Gian Lorenzetto
Mpg Feb08 Gian Lorenzetto Mpg Feb08 Gian Lorenzetto
Mpg Feb08 Gian Lorenzetto
 
Dynamic Vs Static
Dynamic Vs StaticDynamic Vs Static
Dynamic Vs Static
 
Command Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 NovCommand Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 Nov
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
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.