Visitor Code Sample
兄Die,写代码太累了?孤独寂寞冷?还没有女朋友吧?
关注微信公众号(瓠悠笑软件部落),送知识!送知识!送温暖!送工作!送女朋友!插科打诨哟!
Visitor design pattern
- Add an accept(Visitor) method to the “element” hierarchy
- Create a “visitor” base class w/ a visit() method for every “element” type
- Create a “visitor” derived class for each “operation” to do on “elements”
- Client creates “visitor” objects and passes each to accept() calls
interface Element {
void accept(Visitor v);
}
class FOO implements Element {
public void accept(Visitor v) {
v.visit(this);
}
public String getFOO() {
return "FOO";
}
}
class BAR implements Element {
public void accept( Visitor v ) {
v.visit( this );
}
public String getBAR() {
return "BAR";
}
}
class BAZ implements Element {
public void accept(Visitor v) {
v.visit(this);
}
public String getBAZ() {
return "BAZ";
}
}
interface Visitor {
void visit(FOO foo);
void visit(BAR bar);
void visit(BAZ baz);
}
class UpVisitor implements Visitor {
public void visit(FOO foo) {
System.out.println("do Up on " + foo.getFOO());
}
public void visit(BAR bar) {
System.out.println("do Up on " + bar.getBAR());
}
public void visit(BAZ baz) {
System.out.println( "do Up on " + baz.getBAZ() );
}
}
class DownVisitor implements Visitor {
public void visit(FOO foo) {
System.out.println("do Down on " + foo.getFOO());
}
public void visit(BAR bar) {
System.out.println("do Down on " + bar.getBAR());
}
public void visit(BAZ baz ) {
System.out.println("do Down on " + baz.getBAZ());
}
}
public class VisitorDemo {
public static void main( String[] args ) {
Element[] list = {new FOO(), new BAR(), new BAZ()};
UpVisitor up = new UpVisitor();
DownVisitor down = new DownVisitor();
for (Element element : list) {
element.accept(up);
}
for (Element element : list) {
element.accept(down);
}
}
}
##Output
do Up on FOO
do Up on BAR
do Up on BAZ
do Down on FOO
do Down on BAR
do Down on BAZ