我希望为使用工厂方法创建的所有对象实现 ID 生成器,并为使用构造函数创建的所有其他对象分配“0”值。下面的代码中我缺少什么?
public abstract class Figure {
private static int counter = 0;
private int number;
public abstract double calculateArea();
public abstract double calculatePerimeter();
public Figure() {
}
public static Square createSquare(double a) {
return new Square(a);
}
public static Circle createCircle(double r) {
return new Circle(r);
}
public static Rectangle createRectangle(double a, double b) {
return new Rectangle(a, b);
}
public static int getCounter() {
return counter;
}
public static void setCounter(int counter) {
Figure.counter = counter;
}
public int getNumber() {
return number = ++Figure.counter;
}
@Override
public String toString() {
return super.toString();
}
}
您应该在静态方法调用中设置number。
public static Rectangle createRectangle(double a, double b) {
Figure fg = new Rectangle(a, b);
fg.number = ++counter;
return fg;
}
public int getNumber() {
return number;
}
首先,删除 setCounter 方法,因为它将更改类的私有状态。
其次,getNumber方法应该只返回this.number。目前,每当调用该方法时,您的号码都会增加。
第三,将值赋给Figure构造函数中的数字:
this.number = ++counter;
我认为 Square、Circle 和 Rectangle 扩展了 Figure,因此它们将调用超级构造函数并获取它们的数字集。
此外,如果我们谈论工厂设计模式,最好有一个单独的类来生成对象。