在Java中,我说有一个名为'PERSON'的对象扩展了'MESH'。假设在MESH类(或另一个类)中,我有一个静态方法,它创建一个MESH实例。例如:
Mesh m = Mesh.createMesh(parameters)
现在让我说我有班级人员......我如何使用工厂来创建人员的“网格”部分?
Person p = Mesh.createMesh(parameters)
我不认为引用p不能指向没有Person属性的对象,但是我想以某种方式让人员的'mesh'部分重用“factory”方法中的代码。
我希望我说清楚......
答案 0 :(得分:2)
在Person
课程中,您可以使用静态工厂方法createPerson(parameters)
调用createMesh(parameters)
,然后根据返回的Person
创建一个Mesh
对象来自createMesh(parameters)
。例如:
public class Person extends Mesh {
public static Person createPerson(... parameters) {
Mesh mesh = createMesh(parameters);
// now create the Person instance using details from the mesh object
return new Person(mesh, parameters); // or whatever method of creating your Person object that you need to perform
}
}
答案 1 :(得分:0)
对于这种干净利落的事情,你需要使用组合而不是继承。那个人应该有一个网格,而不是一个网格。
public static Person() {
public final Mesh mesh;
public Person(Mesh mesh) {
this.mesh = mesh;
}
}
然后你可以写Person p = new Person(Mesh.createMesh(...));
。
如果你真的想要一个人成为一个网格。然后你需要这样的东西:
public static class Mesh {
protected Mesh(MeshParameters params) {
...
}
public static Mesh createMesh(MeshParameters params) {
return new Mesh(params);
}
}
public static Person extends Mesh {
protected Person(MeshParameters params) {
super(params);
...
}
public static Person createPerson(MeshParameters) {
return new Person(params);
}
}
然后您可以使用Person p = Person.createPerson(...)
。
答案 2 :(得分:0)
最终,Mesh.createMesh()
必须委托给Mesh
的构造函数(或者是子类的构造函数,它委托给Mesh
的构造函数。你可以使该构造函数受到保护,并使用Person
构造函数中受保护的构造函数:
public class Person extends Mesh {
private Person(Parameters parameters) {
super(parameters);
// do more here
}
public static Person create(Parameters parameters) {
return new Person(parameters);
}
}