package shapes.visitor; import shapes.composite.CompositeShape; import shapes.composite.Ellipse; import shapes.composite.Polygon; import shapes.composite.Shape; /* * Computes the total number of ellipses, polygons and composite shapes. */ public class TallyingVisitor implements Visitor { int polys, ellipses, composites ; public TallyingVisitor ( ) { polys = ellipses = composites = 0; } @Override public void visit(Polygon polygon) { polys++; } @Override public void visit(Ellipse ellipse) { ellipses++; } @Override public void visitCompositeStart(CompositeShape shape) { composites++; } @Override public void visitCompositeEnd(CompositeShape shape) { } public void print ( ) { System.out.println ( "Number of polygons: " + polys); System.out.println ( "Number of ellipses: " + ellipses); System.out.println ( "Number of composite shapes: " + composites); } public static void main (String args[] ) { Shape s1, s2, s3, complete; s1 = new Polygon ( ); s2 = new CompositeShape().add( new Ellipse ( )).add(new Polygon ( )).add(new Ellipse()); s3 = new Ellipse ( ); complete = new CompositeShape ( ).add(s1).add(s2).add(s3); TallyingVisitor tally = new TallyingVisitor ( ); complete.accept(tally); tally.print(); } }