假设我试图表示矩形和椭圆形状,最终可以灵活地添加更多形状。所以我写了一个抽象类AShape。在这个抽象类中,我还想抽象字段设置器,如颜色,宽度,高度和位置。
我的第一个想法是做构建器模式,但我知道必须实例化该类才能使用构建器,并且您无法实例化抽象类。这意味着我必须在具体的类中执行它,但那是重复的代码。我可以使用其他模式,还是有办法解决这个问题?
答案 0 :(得分:0)
您当然可以并且正如您所说的那样,使代码的可读性更高,重复次数更少:
public abstract class AShape {
private final String color;
private final int width;
private final int height;
private final int position;
public AShape(String color, int width, int height, int position) {
this.color = color;
this.width = width;
this.height = height;
this.position = position;
}
public String getColor() {
return this.color;
}
public int getWidth() {
return this.width;
}
public int getHeight() {
return this.height;
}
public int getPosition() {
return this.position;
}
}
public class Rectangle extends AShape {
private final int l1;
private final int l2;
public Rectangle(String color, int width, int height, int position, int l1, int l2) {
**super(color, width, height, position);**
this.l1 = l1;
this.l2 = l2;
}
public int getL1() {
return this.l1;
}
public int getL2() {
return this.l2;
}
}
如您所见,您可以在子类中使用构造函数,尽管由于它是抽象的,所以您将永远无法实例化AShape。