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
@@ -33,9 +33,13 @@ public class Commander extends Unit {
super(children);
}
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitCommander(this);
visitor.visit(this);
super.accept(visitor);
}
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class CommanderVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
// Do nothing
}
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
// Do nothing
}
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
LOGGER.info("Good to see you {}", commander);
}
}
@@ -33,9 +33,13 @@ public class Sergeant extends Unit {
super(children);
}
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitSergeant(this);
visitor.visit(this);
super.accept(visitor);
}
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SergeantVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
// Do nothing
}
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
LOGGER.info("Hello {}", sergeant);
}
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
// Do nothing
}
}
@@ -33,9 +33,13 @@ public class Soldier extends Unit {
super(children);
}
/**
* Accept a Visitor.
* @param visitor UnitVisitor to be accepted
*/
@Override
public void accept(UnitVisitor visitor) {
visitor.visitSoldier(this);
visitor.visit(this);
super.accept(visitor);
}
@@ -32,18 +32,30 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SoldierVisitor implements UnitVisitor {
/**
* Soldier Visitor method.
* @param soldier Soldier to be visited
*/
@Override
public void visitSoldier(Soldier soldier) {
public void visit(Soldier soldier) {
LOGGER.info("Greetings {}", soldier);
}
/**
* Sergeant Visitor method.
* @param sergeant Sergeant to be visited
*/
@Override
public void visitSergeant(Sergeant sergeant) {
public void visit(Sergeant sergeant) {
// Do nothing
}
/**
* Commander Visitor method.
* @param commander Commander to be visited
*/
@Override
public void visitCommander(Commander commander) {
public void visit(Commander commander) {
// Do nothing
}
}
@@ -29,10 +29,10 @@ package com.iluwatar.visitor;
*/
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
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
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
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
void testVisitCommander() {
this.visitor.visitCommander(new Commander());
this.visitor.visit(new Commander());
if (this.commanderResponse.isPresent()) {
assertEquals(this.commanderResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());
@@ -107,7 +107,7 @@ public abstract class VisitorTest<V extends UnitVisitor> {
@Test
void testVisitSergeant() {
this.visitor.visitSergeant(new Sergeant());
this.visitor.visit(new Sergeant());
if (this.sergeantResponse.isPresent()) {
assertEquals(this.sergeantResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());
@@ -116,7 +116,7 @@ public abstract class VisitorTest<V extends UnitVisitor> {
@Test
void testVisitSoldier() {
this.visitor.visitSoldier(new Soldier());
this.visitor.visit(new Soldier());
if (this.soldierResponse.isPresent()) {
assertEquals(this.soldierResponse.get(), appender.getLastMessage());
assertEquals(1, appender.getLogSize());