From 2bbf8931330401f628d9eb43b22542d880943239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Mon, 27 May 2024 14:59:50 +0300 Subject: [PATCH] docs: update visitor --- visitor/README.md | 48 +++++++++++++------ .../main/java/com/iluwatar/visitor/App.java | 1 - 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/visitor/README.md b/visitor/README.md index 849e7e6c4..2db1fcd7d 100644 --- a/visitor/README.md +++ b/visitor/README.md @@ -50,6 +50,9 @@ public abstract class Unit { } } +``` + +```java public interface UnitVisitor { void visit(Soldier soldier); @@ -80,7 +83,9 @@ public class Commander extends Unit { return "commander"; } } +``` +```java public class Sergeant extends Unit { public Sergeant(Unit... children) { @@ -98,7 +103,9 @@ public class Sergeant extends Unit { return "sergeant"; } } +``` +```java public class Soldier extends Unit { public Soldier(Unit... children) { @@ -139,7 +146,9 @@ public class CommanderVisitor implements UnitVisitor { LOGGER.info("Good to see you {}", commander); } } +``` +```java @Slf4j public class SergeantVisitor implements UnitVisitor { @@ -158,7 +167,9 @@ public class SergeantVisitor implements UnitVisitor { // Do nothing } } +``` +```java @Slf4j public class SoldierVisitor implements UnitVisitor { @@ -182,23 +193,30 @@ public class SoldierVisitor implements UnitVisitor { Finally, we can show the power of visitors in action. ```java -commander.accept(new SoldierVisitor()); -commander.accept(new SergeantVisitor()); -commander.accept(new CommanderVisitor()); +public static void main(String[] args) { + + var commander = new Commander( + new Sergeant(new Soldier(), new Soldier(), new Soldier()), + new Sergeant(new Soldier(), new Soldier(), new Soldier()) + ); + commander.accept(new SoldierVisitor()); + commander.accept(new SergeantVisitor()); + commander.accept(new CommanderVisitor()); +} ``` Program output: ``` -Greetings soldier -Greetings soldier -Greetings soldier -Greetings soldier -Greetings soldier -Greetings soldier -Hello sergeant -Hello sergeant -Good to see you commander +14:58:06.115 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SoldierVisitor -- Greetings soldier +14:58:06.118 [main] INFO com.iluwatar.visitor.SergeantVisitor -- Hello sergeant +14:58:06.118 [main] INFO com.iluwatar.visitor.SergeantVisitor -- Hello sergeant +14:58:06.118 [main] INFO com.iluwatar.visitor.CommanderVisitor -- Good to see you commander ``` ## Class diagram @@ -215,9 +233,9 @@ Use the Visitor pattern when ## Tutorials -* [Visitor - Refactoring Guru](https://refactoring.guru/design-patterns/visitor) -* [Visitor Pattern Tutorial with Java Examples - DZone](https://dzone.com/articles/design-patterns-visitor) -* [Visitor Design Pattern - Sourcemaking](https://sourcemaking.com/design_patterns/visitor) +* [Visitor (Refactoring Guru)](https://refactoring.guru/design-patterns/visitor) +* [Visitor Pattern Tutorial with Java Examples (DZone)](https://dzone.com/articles/design-patterns-visitor) +* [Visitor Design Pattern (Sourcemaking)](https://sourcemaking.com/design_patterns/visitor) ## Known uses diff --git a/visitor/src/main/java/com/iluwatar/visitor/App.java b/visitor/src/main/java/com/iluwatar/visitor/App.java index b6246ecff..6023649e6 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/App.java +++ b/visitor/src/main/java/com/iluwatar/visitor/App.java @@ -48,6 +48,5 @@ public class App { commander.accept(new SoldierVisitor()); commander.accept(new SergeantVisitor()); commander.accept(new CommanderVisitor()); - } }