Java 'factory'扩展对象的类



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

Mesh m = Mesh.createMesh(parameters)

现在假设我有班级人...如何使用工厂来创建人的"网格"部分?

Person p = Mesh.createMesh(parameters)

我不确定引用 p 不能指向没有 Person 属性的对象,但我想以某种方式让人的"网格"部分重用"工厂"方法中的代码。

我希望我说清楚了...

Person类中,你可以有一个静态工厂方法createPerson(parameters)该方法调用createMesh(parameters),然后根据从createMesh(parameters)返回的Mesh创建一个Person对象。例如:

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
    }
}

最终,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);
  }
}

为了使这种事情干净地工作,你需要使用组合而不是继承。也就是说,一个人应该有一个网格,而不是一个网格。

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

最新更新