我有以下類和結構(簡本)創建子類對象:如何在超視construtor參數在運行時(在Java中)
public abstract class AbstractGeoObj {
private Point position;
...
public abstract calcArea();
public abstract calcPerimeter();
...
some getter
...
some setter
...
}
public class Polygon extends AbstractGeoObj implements InterfaceMove {
private LinkedList<Point> edges;
public Polygon(LinkedList<Point> points) {
//here i want to check the conditions and create the right Object
//but i think this is the wrong way to do it
}
...
private boolean isSquare(List<Points> points) { ... }
private boolean isRectangle(List<Points> points) { ... }
private boolean isRotated(List<Points> points) { ... }
}
public class Rectangle extends Polygon implements InterfaceMove {
public Rectangle(Point a, Point b, Point c, Point d) {}
public Rectangle(Point[] points) { this(...) }
public Rectangle(LinkedList<Piont> points) { this(...) }
...
}
public class Square extends Polygon implements InterfaceMove {
public Square(Point a, Point b, Point c, Point d) {}
public Square(Point[] points) { this(...) }
public Square(LinkedList<Piont> points) { this(...) }
...
}
現在的問題是,我需要創建用Polygon-Object,Rectangle-Object或Square-Object,取決於構造函數參數以及運行時isSquare(),isRectangle()和isRotated()方法的結果,程序應自動選擇應創建哪個對象。例如,如果給定的4個點導致isSquare = true並且isRotated()= false,我想創建Square對象,如果isRotated()= true,我將創建多邊形對象。
我研究了關於建造者模式和工廠模式,但我不明白,所以我could'nt實現它爲我的問題,我不知道是否有對我來說是更好的解決方案。一些正確的方向和示例的建議或提示可能對我有很大的幫助。我希望你明白我的問題。
我知道,長方形和正方形的構造基本上是相同的,但在這裏,那不是話題,以後我會解決它。 ;)
這裏是一個UML圖向你展示當前的結構,其在德國,所以我翻譯的重要組成部分你。 (它不是最終的,我可能會改變它): UML Diagram PNG
感謝您的幫助提前。
好吧,我tryed它,看起來是爲我工作。 我應該將我的解決方案添加到我的問題嗎? – Rep
這很好,不要忘記選擇最佳答案作爲「答案」,以便其他人可以從這篇文章中獲得幫助。不,您不需要發佈解決方案,只需標記最佳答案:)(在選票下面有一張支票) –