创建表示多边形的类,而不是存储在数组中

问题描述

我被赋予了改善一段代码的任务。该代码用于绘制不同的多边形。初始代码具有一个构造函数,该构造函数将诸如“ triangle”,“ square”和“ rectangle”之类的多边形名称添加到ArrayList中。另一个ArrayList包含每个多边形的中心点。我被暗示为每个多边形创建一个类将改善代码,因为它早在编译状态时就阻止了错误,例如用户是否会错误输入多边形名称。我对编码还很陌生,所以我真的不知道该怎么实现。任何人都可以举一个这样的类的例子吗?

解决方法

您可以为多边形类型创建一个Enum,如下所示:

public enum PolygonType{
    TRIANGLE,SQUARE,RECTANGLE,PENTAGON,HEXAGON
}

并创建一个代表Polygon的单个实例的类:

public class Polygon {
    private final PolygonType type;
    
    //Use whatever Point class you use now here
    private final Point2D center;

    public Polygon(PolygonType type,Point2D center) {
         this.type = type;
         this.center = center;
    }

    public PolygonType getType() {
         return type;
    }
    public Point2D getCenter() {
         return center;
    }
}

然后简单地拥有一个List<Polygon>

如果您不想为类型使用枚举,则还可以存储边数,也可以将类型存储为字符串。我更喜欢使用enum,因为您不能使用不正确的值。

如果需要,您还可以通过添加字段和构造函数(构造函数应为private)为枚举提供更多信息,例如边数:

public enum PolygonType {
     TRIANGLE(3),SQUARE(4),RECTANGLE(4);

     public final int sides;
     private PolygonType(int sides) {this.sides = sides;}
} 
,

您可以创建ShapeType作为识别形状的方法。

然后,您可以创建一个表示abstract的{​​{1}}类,然后通过创建各种多边形和几何形状对其进行扩展。

如果所有形状都有类型,位置(来源)和大小,则可以通过Shape语句处理该类型来创建该形状。


演示

下面的示例生成10-50种颜色随机的形状,其大小为画布宽度的5%-10%,并将它们放置在画布中心的最大距离的1/3范围内。

switch