问题描述
我被赋予了改善一段代码的任务。该代码用于绘制不同的多边形。初始代码具有一个构造函数,该构造函数将诸如“ 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