Java' factory'扩展对象的类

时间:2015-04-21 01:53:59

标签: java factory extends

在Java中,我说有一个名为'PERSON'的对象扩展了'MESH'。假设在MESH类(或另一个类)中,我有一个静态方法,它创建一个MESH实例。例如:

Mesh m = Mesh.createMesh(parameters)

现在让我说我有班级人员......我如何使用工厂来创建人员的“网格”部分?

Person p = Mesh.createMesh(parameters)

我不认为引用p不能指向没有Person属性的对象,但是我想以某种方式让人员的'mesh'部分重用“factory”方法中的代码。

我希望我说清楚......

3 个答案:

答案 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);
  }
}