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 deļ¬ne 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 deļ¬ning 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 deļ¬ning the object structure
    rarely change, but you often want to
deļ¬ne new operations over the structure.
   Changing the object structure classes
   requires redeļ¬ning the interface to all
  visitors, which is potentially costly. If the
object structure classes change often, then
       itā€™s probably better to deļ¬ne 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

Code Contracts API In .Net
Code Contracts API In .NetCode Contracts API In .Net
Code Contracts API In .Netmelbournepatterns
Ā 
Phani Kumar - Decorator Pattern
Phani Kumar - Decorator PatternPhani Kumar - Decorator Pattern
Phani Kumar - Decorator Patternmelbournepatterns
Ā 
Adapter Design Pattern
Adapter Design PatternAdapter Design Pattern
Adapter Design Patternmelbournepatterns
Ā 
Prototype Design Pattern
Prototype Design PatternPrototype Design Pattern
Prototype Design Patternmelbournepatterns
Ā 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Patternmelbournepatterns
Ā 
Abstract Factory Design Pattern
Abstract Factory Design PatternAbstract Factory Design Pattern
Abstract Factory Design Patternmelbournepatterns
Ā 
Extract Composite Talk Andy
Extract Composite Talk AndyExtract Composite Talk Andy
Extract Composite Talk Andymelbournepatterns
Ā 
Move Accumulation To Collecting Parameter
Move Accumulation To Collecting ParameterMove Accumulation To Collecting Parameter
Move Accumulation To Collecting Parametermelbournepatterns
Ā 
Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto Mpg Dec07 Gian Lorenzetto
Mpg Dec07 Gian Lorenzetto melbournepatterns
Ā 
Mpg Feb08 Gian Lorenzetto
Mpg Feb08 Gian Lorenzetto Mpg Feb08 Gian Lorenzetto
Mpg Feb08 Gian Lorenzetto melbournepatterns
Ā 
Command Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 NovCommand Pattern Geoff Burns 2006 Nov
Command Pattern Geoff Burns 2006 Novmelbournepatterns
Ā 

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

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
Ā 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
Ā 
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot ModelDeepika Singh
Ā 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
Ā 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vƔzquez
Ā 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
Ā 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
Ā 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
Ā 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
Ā 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
Ā 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
Ā 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
Ā 
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...apidays
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
Ā 
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 Scriptwesley chun
Ā 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
Ā 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
Ā 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbuapidays
Ā 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
Ā 

Recently uploaded (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
Ā 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
Ā 
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls šŸ„° 8617370543 Service Offer VIP Hot Model
Ā 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
Ā 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
Ā 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Ā 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Ā 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Ā 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
Ā 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
Ā 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
Ā 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
Ā 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Ā 
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...
Ā 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Ā 
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
Ā 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Ā 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Ā 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Ā 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Ā 

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 deļ¬ne 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 deļ¬ning 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 deļ¬ning the object structure rarely change, but you often want to deļ¬ne new operations over the structure. Changing the object structure classes requires redeļ¬ning the interface to all visitors, which is potentially costly. If the object structure classes change often, then itā€™s probably better to deļ¬ne 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.