/*******************************************************************************
* Companion code for the book "Introduction to Software Design with Java",
* 2nd edition by Martin P. Robillard.
*
* Copyright (C) 2022 by Martin P. Robillard
*
* This code is licensed under a Creative Commons
* Attribution-NonCommercial-NoDerivatives 4.0 International License.
*
* See http://creativecommons.org/licenses/by-nc-nd/4.0/
*
*******************************************************************************/
package e2.chapter8;
public class implements CardSourceVisitor
{
@Override
public void visitCompositeCardSource(CompositeCardSource pCompositeCardSource) {
for( CardSource source : pCompositeCardSource ) {
source.accept(this);
}
}
@Override
public void visitDeck(Deck pDeck)
{}
@Override
public void visitCardSequence(CardSequence pCardSequence)
{}
}
Providing an abstract class that implements the Visitor
interface
offers two main benefits:
visit
methods, concrete visitors
that inherit from the abstract class only need to override the methods
relevant to a specific operation. In realistic applications, the element
type hierarchy may have dozens of types, with as many visit
methods.accept
methods, the
abstract class can provide a default traversal strategy, further reducing
code duplication between different concrete visitors.Providing an abstract class that implements the Visitor
interface
offers two main benefits:
visit
methods, concrete visitors
that inherit from the abstract class only need to override the methods
relevant to a specific operation. In realistic applications, the element
type hierarchy may have dozens of types, with as many visit
methods.accept
methods, the
abstract class can provide a default traversal strategy, further reducing
code duplication between different concrete visitors.