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)
非常感谢你提前;)
您可以将Person构造函数public包设为私有(即删除访问修饰符),这将只允许来自同一个包的类访问它.
然后,如果PersonFactory属于同一个包Person,它将有权访问该构造函数.
如果PersonManagement属于不同的包,则无法访问该构造函数.
另一个选择是保留Person构造函数private并将createPerson()方法移动到Person类.
我通常通过将工厂方法放在类中Person而不是放在单独的工厂类中来解决问题。在这种情况下,构造函数可以是私有的,并且Person可以从工厂方法而不是其他地方获取对象。不过,不知道这是否适合您的设计。
这里的一个潜在问题是,如果您不\xe2\x80\x99 不需要工厂方法static。然而,我看到你的是,所以这不应该阻止你。
| 归档时间: |
|
| 查看次数: |
1742 次 |
| 最近记录: |