BEFORE |
AFTER |
package gPackage; public class Application
{ public
static void main(String[] args) { Picture
p = new Picture(); p.add(new Square()); p.add(new Triangle()); //
... p.draw(); } } |
package gPackage;
public class Application { public static void main(String[] args) { Picture p = new Picture(); p.add(new Square()); p.add(new Triangle()); // .. p.accept(gPackage.DrawVisitor.instance); } } |
package gPackage;
public class Graphic { public void draw() { System.out.println("draw() in Graphic"); } } |
package gPackage;
public class Graphic { public void accept(DrawVisitor gpackage_drawvisitor) { gpackage_drawvisitor.visit(this); } } |
package gPackage;
import java.util.ArrayList;
public class Picture extends Graphic { public ArrayList<Graphic> gList = new ArrayList<Graphic>(); public void add(Graphic g) { gList.add(g); } public void draw() { System.out.println("draw() in Picture"); for(Graphic g : gList) g.draw(); } } |
package gPackage;
import java.util.ArrayList;
public class Picture extends Graphic { public ArrayList<Graphic> gList = new ArrayList<Graphic>(); public void add(Graphic g) { gList.add(g); }
public void accept(DrawVisitor gpackage_drawvisitor) { gpackage_drawvisitor.visit(this); } } |
package gPackage;
public class Square extends Graphic { public void draw() { System.out.println("draw() in Square"); } } |
package gPackage;
public class Square extends Graphic { public void accept(DrawVisitor gpackage_drawvisitor) { gpackage_drawvisitor.visit(this); } } |
package gPackage;
public class Triangle extends Graphic { public void draw() { System.out.println("draw() in Triangle"); } } |
package gPackage;
public class Triangle extends Graphic { public void accept(DrawVisitor gpackage_drawvisitor) { gpackage_drawvisitor.visit(this); } } |
|
package gPackage;
public class DrawVisitor {
public static final DrawVisitor instance = new DrawVisitor(); public void visit(gPackage.Graphic gpackage_graphic) { System.out.println("draw() in Graphic"); } public void visit(gPackage.Triangle gpackage_triangle) { System.out.println("draw() in Triamgle"); } public void visit(gPackage.Square gpackage_square) { System.out.println("draw() in Square"); } public void visit(gPackage.Picture gpackage_picture) { System.out.println("draw() in Picture"); for(gPackage.Graphic g : gpackage_picture.gList) g.accept(gPackage.DrawVisitor.instance); } } |