gpt4 book ai didi

java - OO - 使用无参数的方法创建对象

转载 作者:行者123 更新时间:2023-12-01 17:18:44 25 4
gpt4 key购买 nike

我在理解 OO 模式如何工作时遇到了一些问题,我的讲师给了我以下问题,但我思考了一整天后无法解决它

我的问题的场景。

有一个名为“ShapeManager”的类,用于管理 Shape 对象。名为“Shape”的类有两个名为“Circle”和“矩形”的子类

Shape类的实现如下

abstract public class Shape {
private String id;
private double length;

public Shape() {

}
public Shape(String id , double length) {
this.id = id;
this.length = length;
}
public void setID(String id) {
this.id = id;
}
public String getID() {
return id;
}
public void setLength(double length) {
this.length = length;
}
public double getLength() {
return length;
}
public abstract String getDetails();

}

子类Square如下

public class Square extends Shape{

public Square() {
super();
}
public Square(String id , double side) {
super(id, side);
}

@Override
public String getDetails() {
return "Square => Id : "+getID() +", Side : "+ getLength() + ",Area : "+(getLength() * getLength());
}
}

子类Circle如下

public class Circle extends Shape{
public Circle(){
super();
}
public Circle (String id, double radius) {
super(id, radius);

}

@Override
public String details() {
return "Circle => Id : "+getID() + ", Radius : "+ getLength() + ",Area: "+(3.14*(getLength() * getLength()));
}
}

ShapeManager类如下,这不是一个完整的类

public class ShapeManager {
public Shape createShape() {

}
public void updateLength(String id ){

}
public void deleteShape(String id) {

}
public void listShapes() {

}

}

ShapeManagerShape 关联

 ShapeManager --1------0..*--> Shape

这个包的设计(上面的所有类)不能改变,实现必须遵循OCP(开闭原则)。

我的问题是:我该如何完成createShape方法?如果没有参数,似乎不可能创建矩形或圆形对象。

最佳答案

如果不知道形状是什么(正方形、圆形或其他形状),ShapeManager 就无法创建该形状。它确实不知道,因为你说 createShare 方法没有参数。要么你误解了这个问题,要么讲师没有解释清楚。您应该向他/她寻求澄清。如果您查看 Java 或任何其他 OO 语言的库,我很确定您不会找到您在示例中给出的场景和实现模式。

<小时/>

@croraf

我认为你应该找到一些其他的读物,例如经典书籍http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 。工厂的主要思想是它返回调用者不知道并且不关心其类型的东西。例如,如果某个 SocketFactory 中有一个 createSocket() 方法,则该方法通常定义为返回一个接口(interface)或抽象类 Socket。但实际上它返回的是具体类 new SocketImpl1() 和 new SocketImpl2() 。工厂返回的内容可能取决于很多因素——系统属性、底层操作系统、任何你能想到的东西。主要思想是工厂将 Socket 对象的创建集中在一个地方。这样,如果您需要进行更改,只需在工厂中即可完成。我认为这本书也有一些不错的 Java 对应书,你可以看看。此处引用了其他免费的好资源。

Real world examples of Factory Method pattern

关于java - OO - 使用无参数的方法创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20298834/

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