gpt4 book ai didi

java - 如何在运行时根据构造函数参数在父类(super class)中创建子类对象(在 Java 中)

转载 作者:行者123 更新时间:2023-11-30 06:57:22 25 4
gpt4 key购买 nike

我有以下类和结构(简化版):

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(...) }

...
}

现在的问题是,我需要创建多边形对象、矩形对象或方形对象,具体取决于运行时的构造函数参数和方法 isSquare()、isRectangle() 和 isRotated() 的结果,程序应该自动选择应该创建哪个对象。例如,如果 4 个给定点导致 isSquare = true 和 isRotated() = false,我想创建方形对象,如果 isRotated() = true 我将始终创建多边形对象。

我研究了 Builder Pattern 和 Factory Pattern,但我不理解它们,所以我无法针对我的问题实现它,我不知道是否有更好的解决方案适合我。一些正确方向的建议或提示,也许还有例子可能对我有很大帮助。希望您理解我的问题。

我知道 Rectangle 和 Square 的构造函数基本相同,不过这不是主题,我稍后再解决。 ;)

这是一个 UML 图,向您展示了当前的结构,它是德语的,所以我为您翻译了重要的部分。 (它不是最终的,我可能会改变它): UML Diagram PNG

提前感谢您的帮助。

最佳答案

这是错误的,我认为使用工厂是最好的方式(https://en.wikipedia.org/wiki/Factory_method_pattern),这样你就可以采用更多的 oop 方法,因为构造函数的作用不是确定要创建哪种对象,它的作用是创建它应该构造的对象。

创建一个类:

class ShapeFactory{
public static SuperClass getShape(params...){
if(cond1){return new WhateverSubClass1;}
else if(cond2){return new WhateverSubClass2;}
... (etc for all subclass cases)
}
}

编辑:远程引用: http://www.tutorialspoint.com/design_pattern/abstract_factory_pattern.htm

关于java - 如何在运行时根据构造函数参数在父类(super class)中创建子类对象(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33499511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com