import java.util.Arrays; import java.util.List; import java.util.ArrayList; public class Main { public static void main(String[] args) { // Test the shape classes and functionality List shapes = new ArrayList<>(); shapes.add(new Square(5.0, "Red")); shapes.add(new Circle(3.0, "Blue")); // Test ColorFilter ColorFilter redFilter = new ColorFilter("Red"); List redShapes = redFilter.filterByColor(shapes); System.out.println("Number of red shapes: " + redShapes.size()); // Test Resizable functionality for (Shape shape : shapes) { if (shape instanceof Resizable) { System.out.println("Before resize: " + shape.calculateArea()); ((Resizable) shape).resize(1.5); System.out.println("After resize: " + shape.calculateArea()); } } // Test ShapeStatisticsAnalyzer ShapeStatisticsAnalyzer analyzer = new ShapeStatisticsAnalyzer(shapes); analyzer.printStatistics(); // Test Shape Conversion System System.out.println("\n===== Testing Shape Conversion ====="); CircleToSquareConverter circleToSquare = new CircleToSquareConverter(); SquareToCircleConverter squareToCircle = new SquareToCircleConverter(); Circle originalCircle = new Circle(4.0, "Green"); Square convertedSquare = circleToSquare.convert(originalCircle); System.out.println("Original Circle: Area = " + originalCircle.calculateArea() + ", Color = " + originalCircle.getColor()); System.out.println("Converted Square: Area = " + convertedSquare.calculateArea() + ", Color = " + convertedSquare.getColor() + ", Side = " + convertedSquare.getSide()); Square originalSquare = new Square(6.0, "Yellow"); Circle convertedCircle = squareToCircle.convert(originalSquare); System.out.println("Original Square: Area = " + originalSquare.calculateArea() + ", Color = " + originalSquare.getColor()); System.out.println("Converted Circle: Area = " + convertedCircle.calculateArea() + ", Color = " + convertedCircle.getColor() + ", Radius = " + convertedCircle.getRadius()); // Test Composite Shape System System.out.println("\n===== Testing Composite Shape ====="); CompositeShape composite = new CompositeShape("Composite-Group"); composite.addShape(new Square(2.0, "Purple")); composite.addShape(new Circle(1.0, "Orange")); composite.addShape(new Square(3.0, "Pink")); System.out.println("Composite Shape - Number of shapes: " + composite.getShapeCount()); System.out.println("Composite Shape - Total Area: " + composite.calculateArea()); System.out.println("Composite Shape - Total Perimeter: " + composite.calculatePerimeter()); System.out.println("Composite Shape - Color: " + composite.getColor()); // Test resizing composite shape System.out.println("\nResizing composite shape by factor 2.0"); composite.resize(2.0); System.out.println("Composite Shape - After resize - Total Area: " + composite.calculateArea()); System.out.println("Composite Shape - After resize - Total Perimeter: " + composite.calculatePerimeter()); // Test setting color for all shapes in composite System.out.println("\nSetting color for all shapes in composite to 'Black'"); composite.setAllShapesColor("Black"); // Display individual shapes after modifications System.out.println("\nIndividual shapes after modifications:"); for (Shape shape : composite.getShapes()) { System.out.println("- Shape: " + shape.getClass().getSimpleName() + ", Color: " + shape.getColor() + ", Area: " + shape.calculateArea()); } } }