improvement: fix issue 1968 and correct visitor pattern code and test. (#2023)

* fix issue 1968 and correct visitor pattern code and test.

* fix README code as well.
This commit is contained in:
xyllq999
2022-09-26 02:02:08 +08:00
committed by GitHub
parent b33d00209c
commit a568656036
12 changed files with 81 additions and 33 deletions
+12 -12
View File
@@ -72,7 +72,7 @@ public class Commander extends Unit {
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitCommander(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -90,7 +90,7 @@ public class Sergeant extends Unit {
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitSergeant(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -108,7 +108,7 @@ public class Soldier extends Unit {
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitSoldier(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -126,17 +126,17 @@ Here are then some concrete visitors.
public class CommanderVisitor implements UnitVisitor { public class CommanderVisitor implements UnitVisitor {
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
// Do nothing // Do nothing
} }
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
// Do nothing // Do nothing
} }
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
LOGGER.info("Good to see you {}", commander); LOGGER.info("Good to see you {}", commander);
} }
} }
@@ -145,17 +145,17 @@ public class CommanderVisitor implements UnitVisitor {
public class SergeantVisitor implements UnitVisitor { public class SergeantVisitor implements UnitVisitor {
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
// Do nothing // Do nothing
} }
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
LOGGER.info("Hello {}", sergeant); LOGGER.info("Hello {}", sergeant);
} }
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
// Do nothing // Do nothing
} }
} }
@@ -164,17 +164,17 @@ public class SergeantVisitor implements UnitVisitor {
public class SoldierVisitor implements UnitVisitor { public class SoldierVisitor implements UnitVisitor {
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
LOGGER.info("Greetings {}", soldier); LOGGER.info("Greetings {}", soldier);
} }
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
// Do nothing // Do nothing
} }
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
// Do nothing // Do nothing
} }
} }
@@ -33,9 +33,13 @@ public class Commander extends Unit {
super(children); super(children);
} }
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitCommander(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class CommanderVisitor implements UnitVisitor { public class CommanderVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
// Do nothing // Do nothing
} }
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
// Do nothing // Do nothing
} }
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
LOGGER.info("Good to see you {}", commander); LOGGER.info("Good to see you {}", commander);
} }
} }
@@ -33,9 +33,13 @@ public class Sergeant extends Unit {
super(children); super(children);
} }
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitSergeant(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class SergeantVisitor implements UnitVisitor { public class SergeantVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
// Do nothing // Do nothing
} }
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
LOGGER.info("Hello {}", sergeant); LOGGER.info("Hello {}", sergeant);
} }
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
// Do nothing // Do nothing
} }
} }
@@ -33,9 +33,13 @@ public class Soldier extends Unit {
super(children); super(children);
} }
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override @Override
public void accept(UnitVisitor visitor) { public void accept(UnitVisitor visitor) {
visitor.visitSoldier(this); visitor.visit(this);
super.accept(visitor); super.accept(visitor);
} }
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j @Slf4j
public class SoldierVisitor implements UnitVisitor { public class SoldierVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override @Override
public void visitSoldier(Soldier soldier) { public void visit(Soldier soldier) {
LOGGER.info("Greetings {}", soldier); LOGGER.info("Greetings {}", soldier);
} }
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override @Override
public void visitSergeant(Sergeant sergeant) { public void visit(Sergeant sergeant) {
// Do nothing // Do nothing
} }
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override @Override
public void visitCommander(Commander commander) { public void visit(Commander commander) {
// Do nothing // Do nothing
} }
} }
@@ -29,10 +29,10 @@ package com.iluwatar.visitor;
*/ */
public interface UnitVisitor { public interface UnitVisitor {
void visitSoldier(Soldier soldier); void visit(Soldier soldier);
void visitSergeant(Sergeant sergeant); void visit(Sergeant sergeant);
void visitCommander(Commander commander); void visit(Commander commander);
} }
@@ -43,7 +43,7 @@ public class CommanderTest extends UnitTest<Commander> {
@Override @Override
void verifyVisit(Commander unit, UnitVisitor mockedVisitor) { void verifyVisit(Commander unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitCommander(eq(unit)); verify(mockedVisitor).visit(eq(unit));
} }
} }
@@ -43,7 +43,7 @@ public class SergeantTest extends UnitTest<Sergeant> {
@Override @Override
void verifyVisit(Sergeant unit, UnitVisitor mockedVisitor) { void verifyVisit(Sergeant unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitSergeant(eq(unit)); verify(mockedVisitor).visit(eq(unit));
} }
} }
@@ -43,7 +43,7 @@ public class SoldierTest extends UnitTest<Soldier> {
@Override @Override
void verifyVisit(Soldier unit, UnitVisitor mockedVisitor) { void verifyVisit(Soldier unit, UnitVisitor mockedVisitor) {
verify(mockedVisitor).visitSoldier(eq(unit)); verify(mockedVisitor).visit(eq(unit));
} }
} }
@@ -98,7 +98,7 @@ public abstract class VisitorTest<V extends UnitVisitor> {
@Test @Test
void testVisitCommander() { void testVisitCommander() {
this.visitor.visitCommander(new Commander()); this.visitor.visit(new Commander());
if (this.commanderResponse.isPresent()) { if (this.commanderResponse.isPresent()) {
assertEquals(this.commanderResponse.get(), appender.getLastMessage()); assertEquals(this.commanderResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize()); assertEquals(1, appender.getLogSize());
@@ -107,7 +107,7 @@ public abstract class VisitorTest<V extends UnitVisitor> {
@Test @Test
void testVisitSergeant() { void testVisitSergeant() {
this.visitor.visitSergeant(new Sergeant()); this.visitor.visit(new Sergeant());
if (this.sergeantResponse.isPresent()) { if (this.sergeantResponse.isPresent()) {
assertEquals(this.sergeantResponse.get(), appender.getLastMessage()); assertEquals(this.sergeantResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize()); assertEquals(1, appender.getLogSize());
@@ -116,7 +116,7 @@ public abstract class VisitorTest<V extends UnitVisitor> {
@Test @Test
void testVisitSoldier() { void testVisitSoldier() {
this.visitor.visitSoldier(new Soldier()); this.visitor.visit(new Soldier());
if (this.soldierResponse.isPresent()) { if (this.soldierResponse.isPresent()) {
assertEquals(this.soldierResponse.get(), appender.getLastMessage()); assertEquals(this.soldierResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize()); assertEquals(1, appender.getLogSize());