使用Factory专门创建对象

pix*_*mer 5 java factory object

我目前正在研究一个学生项目,并想知道是否有办法专门用工厂方法创建对象?

public class PersonFactory {

    public static Person createPerson() {
        // some constraints ...
        return new Person();
    }

}
Run Code Online (Sandbox Code Playgroud)

我的示例PersonFactory.java应该Person用它的createPerson()方法返回对象.

public class Person {

    // some examples ...
    private String name;
    private int age;

    public Person() {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在main程序中,我仍然能够Person使用它们的公共构造函数创建对象(因为它是public).但是如果我将构造函数更改为private,则工厂方法也无法访问它.

public class PersonManagement {

    public static void main(String[] args) {
        // both still works ...
        Person p1 = new Person();
        Person p2 = PersonFactory.createPerson();
    }

}
Run Code Online (Sandbox Code Playgroud)

非常感谢你提前;)

Era*_*ran 6

您可以将Person构造函数public包设为私有(即删除访问修饰符),这将只允许来自同一个包的类访问它.

然后,如果PersonFactory属于同一个包Person,它将有权访问该构造函数.

如果PersonManagement属于不同的包,则无法访问该构造函数.

另一个选择是保留Person构造函数private并将createPerson()方法移动到Person类.


Ole*_*.V. 3

我通常通过将工厂方法放在类中Person而不是放在单独的工厂类中来解决问题。在这种情况下,构造函数可以是私有的,并且Person可以从工厂方法而不是其他地方获取对象。不过,不知道这是否适合您的设计。

\n\n

这里的一个潜在问题是,如果您不\xe2\x80\x99 不需要工厂方法static。然而,我看到你的是,所以这不应该阻止你。

\n