BAEL-1792 overview of visitor design pattern
This commit is contained in:
parent
60cb1d7d49
commit
a4a8e1dc6c
|
@ -0,0 +1,20 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Document extends Element {
|
||||||
|
|
||||||
|
List<Element> elements = new ArrayList<>();
|
||||||
|
|
||||||
|
public Document(String uuid) {
|
||||||
|
super(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void accept(Visitor v) {
|
||||||
|
for (Element e : this.elements) {
|
||||||
|
e.accept(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
public abstract class Element {
|
||||||
|
|
||||||
|
public String uuid;
|
||||||
|
|
||||||
|
public Element(String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void accept(Visitor v);
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
public class ElementVisitor implements Visitor {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(XmlElement xe) {
|
||||||
|
System.out.println("processing xml element with uuid: " + xe.uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visit(JsonElement je) {
|
||||||
|
System.out.println("processing json element with uuid: " + je.uuid);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
public class JsonElement extends Element {
|
||||||
|
|
||||||
|
public JsonElement(String uuid) {
|
||||||
|
super(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void accept(Visitor v) {
|
||||||
|
v.visit(this);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
public interface Visitor {
|
||||||
|
|
||||||
|
void visit(XmlElement xe);
|
||||||
|
|
||||||
|
void visit(JsonElement je);
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class VisitorDemo {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
Visitor v = new ElementVisitor();
|
||||||
|
|
||||||
|
Document d = new Document(generateUuid());
|
||||||
|
d.elements.add(new JsonElement(generateUuid()));
|
||||||
|
d.elements.add(new JsonElement(generateUuid()));
|
||||||
|
d.elements.add(new XmlElement(generateUuid()));
|
||||||
|
|
||||||
|
d.accept(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String generateUuid() {
|
||||||
|
return UUID.randomUUID()
|
||||||
|
.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package com.baeldung.visitor;
|
||||||
|
|
||||||
|
public class XmlElement extends Element {
|
||||||
|
|
||||||
|
public XmlElement(String uuid) {
|
||||||
|
super(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void accept(Visitor v) {
|
||||||
|
v.visit(this);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue