@startuml package com.iluwatar.acyclicvisitor { interface AllModemVisitor { } class App { + App() + main(args : String[]) {static} } class ConfigureForDosVisitor { - LOGGER : Logger {static} + ConfigureForDosVisitor() + visit(hayes : Hayes) + visit(zoom : Zoom) } class ConfigureForUnixVisitor { - LOGGER : Logger {static} + ConfigureForUnixVisitor() + visit(zoom : Zoom) } class Hayes { - LOGGER : Logger {static} + Hayes() + accept(modemVisitor : ModemVisitor) + toString() : String } interface HayesVisitor { + visit(Hayes) {abstract} } abstract class Modem { + Modem() + accept(ModemVisitor) {abstract} } interface ModemVisitor { } class Zoom { - LOGGER : Logger {static} + Zoom() + accept(modemVisitor : ModemVisitor) + toString() : String } interface ZoomVisitor { + visit(Zoom) {abstract} } } AllModemVisitor --|> ZoomVisitor AllModemVisitor --|> HayesVisitor ConfigureForDosVisitor ..|> AllModemVisitor ConfigureForUnixVisitor ..|> ZoomVisitor Hayes --|> Modem HayesVisitor --|> ModemVisitor Zoom --|> Modem ZoomVisitor --|> ModemVisitor @enduml