package visitor; /** * Concrete Visitor 2 — calculates perimeter. * Adding this visitor added zero code to Shape, Circle, Rectangle, Triangle. */ public class PerimeterCalculator implements ShapeVisitor { @Override public void visit(Circle c) { double p = 2 * Math.PI * c.getRadius(); System.out.printf(" Perimeter of %s = %.2f%n", c.getName(), p); } @Override public void visit(Rectangle r) { double p = 2 * (r.getWidth() + r.getHeight()); System.out.printf(" Perimeter of %s = %.2f%n", r.getName(), p); } @Override public void visit(Triangle t) { // Simplified: assume isoceles — base + 2 equal sides approximated double side = Math.sqrt(Math.pow(t.getBase() / 2, 2) + Math.pow(t.getHeight(), 2)); double p = t.getBase() + 2 * side; System.out.printf(" Perimeter of %s = %.2f%n", t.getName(), p); } }